安全--中间人攻击--cSpolit:

安全--中间人攻击--cSpolit:

功能:
    1 网络拓扑结构
    2 指纹识别操作系统和开放端口
    3 在本地网络之外添加你的主机
    4 完整的路由追踪
    5 完整 Metasploit 框架 RPCd(远程过程调用守护程序)
        查找已知的漏洞
        。。。
    6 伪造TCP/UDP数据包
    7 执行MIMT(中间人攻击):
        图片、文字、视频替换
        js注入
        密码探测
        抓取网络流量文件
        实时操作替换图片,文字,注入js等到web网页
        DNS欺骗,重定向到不同的域名
        断开已经存在的连接
        重定向到另一个地址
        会话劫持:监听未加密的cookies和克隆到Web会话中

使用到的第三方库:
    commons-compress:
        
    Apache commons-net:
        library implements the client side of many basic Internet protocols.The purpose of the library is to provide fundamental protocol access, not higher-level abstractions

    java-semver:
        
    unbescape:
        unbescape is a Java library aimed at performing fully-featured and high-performance escape and unescape operations for:HTML、XML、JS...

    juniversalchardet:
        juniversalchardet is a Java port of 'universalchardet', that is the encoding detector library of Mozilla.

    XZ:
        XZ Utils is free general-purpose data compression software with a high compression ratio

    ACRA:
        ACRA is a library enabling Android Application to automatically post their crash reports to a report server
    
    HamCrest:
        Matchers that can be combined to create flexible expressions of intent

使用git的子模块技术:
    https://github.com/cSploit/android/issues/30
    
    https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97
    Book:
    Video:
    
怎么编译modle:
    https://github.com/cSploit/android.native/blob/master/README.md

native-module分析:

APR:
    Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API
APRUtil:
    一些工具方法
arpspoof:
    Arpspoof是一个非常好的ARP欺骗的源代码程序.
bdb:
cSploitClient:
cSploitCommon:
    cSploit common library
cSploitDaemon:
    守护进程
cSploitHandlers:

ettercap-ng:
    ARP欺骗
firebird:
    跨平台关系型数据库。
    用C和C++开发
freetds:
    为unix和linux能够访问本地Microsoft SQL Server提供的一些列库的集合
fusemounts
    FUSE:Filesystem in Userspace
    突破权限约束
hydra
    linux暴力密码在线破解工具
icu4c:
    解决国际化的问题
include
    
libbthread:
    bionic(模仿) library that provide some missing posix(可移植) threading function
libcares:
    c-ares is a C library for asynchronous DNS requests (including name resolves)
libcurl:
    跨平台网络协议库,支持http(s)、ftp等
libedit
    命令行帮助工具,例如补全
libexpat
    XML parser
libiconv:
    iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进行文本内码的转换。
libidn
    Libidn is a package for internationalized string handling based on the Stringprep, Punycode, IDNA and TLD specifications.
libifaddrs
    An implementation of getifaddrs() for Android.
libmysqlclient
    mysql相关
libncp
    a fast file copy tool for LANs
libneon:
    neon is an HTTP and WebDAV client library, with a C interface.
libnet:
    libnet是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据包的构造、处理和发送功能。
libpcap:
    libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名的tcpdump就是以它为基础的。
libpcre:
    PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
libreadline:
    GNU readline是一个开源的跨平台程序库,提供了交互式的文本编辑功能。
libssh:
    SSH 为 Secure Shell 的缩写,
    SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
libtommath:
    libtommath是一个大数算法库。
libxml2
    xml解析
libxslt:
    XSL 指扩展样式表语言(EXtensible Stylesheet Language)
libyaml:
    YAML是“另一种标记语言”的外语缩写,但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。
ncurses
    计算机语言,指的是提供字符终端处理库。
network-radar
    it's completely written in C, using threads for faster execution and libcares for asynchronous name resolving.
nmap:
    Nmap Free Security Scanner, Port Scanner, & Network Exploration Tool.
openldap:
    OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
openssl:
    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
postgresql:
    PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。
ruby:
    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言
sqlite:
    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
subversion:
    svn
tcpdump:
    TcpDump可以将网络中传送的数据包完全截获下来提供分析
thomson
unixODBC:
    unixodbc是一个来连接数据库的组件。
zlib:
    zlib是提供数据压缩用的函式库。
项目运行前准备工作:
1  下载:
    git clone [email protected]:cSploit/android.git
2  cSploit/jni为空:
    git submodule update --init --recursive
    多层依赖,需要执行多次
3  编译:
    下载ndk,配置环境变量
    执行编译命令 ndk-build
4 修改gradle-wrapper.properties(如果gradle可以正常下载,可以跳过此步骤):
       distributionUrl=http://om0taayby.bkt.clouddn.com/gradle-4.6-all.zip

5  在model的build.gradle文件中配置libs(在android{ }中):
    sourceSets {
        main {
          jniLibs.srcDirs = ['libs']
        }
    }   
6  直接Run就可以了。哈哈

阅读代码遇到的问题:

1 核心未安装, 应用将仅检查更新:
    查找 /data/user/0/org.csploit.android/files/VERSION是否存在,如果不存在就初始化失败,提示核心未安装       
    使用Core version:
        /data/app/org.csploit.android-2/base.apk
        /vendor/lib
2 如何开始发现主机,并把扫描结果展示到listview:
    更新到Listview:
        Adapter实现了Observer方法
3 jni目录为空:
    命令执行:
        git submodule update --init --recursive
        多层依赖,需要执行多次
    
    参考链接:http://stackoverflow.com/questions/1030169/easy-way-pull-latest-of-all-submodules

4 make: *** No rule to make target:
    使用旧版ndk,包含toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc就可以正常编译。

局域网扫描:

1 传入IP和子网掩码获取整个局域网所有IP
2 获取ip公网IP:
    2.1  curl members.3322.org/dyndns/getip
    2.2  traceroutew www.baidu.com
    2.3  获取路由器路由表
参考

Apach-Net(非常重要,里面有大量的工具类)

不一样的网站-onlyZero |
不一样的网站-bit.no |
不一样的网站-theshadowbrokers.bit

MAC_OS_BUILD_ENVIROMENT



代码分析:

源码阅读步骤:

11.20日
    上午:
        core包内源码
    下午:
        events
        gui
        helpers
        net:
            datasource
            http
            proxy
            server
            metasploit
            
        plugins:
            主要功能的UI在这里
        services:
        tools:
            arpspoof
            Ettercap:
                Ettercap is a comprehensive suite for man in the middle attacks
            TCPDUMP:
                TcpDump可以将网络中传送的数据包完全截获下来提供分析。
            network-radar:
                快速发现主机
        wifi:
            ...
        
    
    
    Metasploit:
        Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报
    Armitage:
        Metasploit的图形管理工具。

 11.21日 :
    上午:
        JNI基础
    下午:
        JNI基础
        JNI的调试步骤:
            LLDB(LLDB is a next generation, high-performance debugger)          
11.22日:
    上午:
        Native log输出:
            1 在Android.mk文件中添加:
                :LOCAL_LDLIBS := -llog
            2 在要使用LOG的cpp文件中加入:
                #include 
                #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__)   
            3 ndk-build生成新so库后,即可正常log输出
            
11.23日:
    怎么执行命令?
    怎么返回结果?
JNI-静态注册和动态注册
静态注册:
    包名+方法名
    jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )  
    {  
        return (*env)->NewStringUTF(env, "Hello from JNI !");  
    }   
    书写不方便   
动态注册:
    在JNI_ONLOAD()方法中为每一个方法进行注册
参考:

offensive-security:安全认证平台

Kali | Kali-tools

metasploit

Armitage

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)


-------------------2017新的开始---------------

第一周

代码阅读:
调用顺序:
    cSploitClient--notifier.c--notifier
    cSploitClient--event.c--send_event
--->cSploitClient--cache.c--init_csploit_core_childmanager_cache
--->ChildManager.onEvent
-->ChildManager.dispatchEvent
-->NetworkRadar.HostReceiver.onEvent
-->NetworkRadar.onHostFound
-->System.addOrderedTarget


结论:
    接收arp请求,更新设备列表
    
C调用顺序:
    notifier.c: 
         notifier-->on_message-->on_netradar-->send_event
         ---->ChildManager.onEvent111
         
结构体:
    typedef struct list {
         node *head, *tail;
    } list;
    
    typedef struct node {
        struct node *next;
    } node;
Java和C的相互调用:
C调用Java的方法:
    CallObjectMethod
Java调用C的方法:
    1 静态注册:
        
    2 动态注册
JNI日志及调试:
1 添加log.c头文件:
    #include 
    #define LOG_TAG "cSploitClient"
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , LOG_TAG, __VA_ARGS__)
2 修改Android.mk文件:
    添加:
    LOCAL_LALIBS+=--llog
3 定义log.c文件:
Debug调试相关:
gradle-experimental:
    可以在不用编写.mk文件的情况下进行ndk开发

第二次阅读源码

    MainActivity-->MainFragment-TargetAdapter-->System.getTargets()-addOrderedTarget-->NetworkRadar.Receiver

MainActivity-->MainFragment-->Target.getDescription()--Endpoint.getHardwareAsString()-Endpoint的构造方法
        Endpoint是Target的一个成员变量
        初始化Target时(构造方法: Target(InetAddress address, byte[] hardware)),初始化了成员变量Endpoint,Endpoint构造方法中初始化了Mac地址
        查找Target(InetAddress address, byte[] hardware)在哪些类中调用了
                获取mac地址方法汇总:
                1 调用Android的API: WifiManager:
                public String getLocalMacAddress() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        return info.getMacAddress();
    }
    2 :读address文件
                cat /sys/class/net/wlan0/address
    3 :
    调用android 的API: NetworkInterface. getHardwareAddress ()(考虑权限问题;内部实现就是读取address文件)
                该API的level为9,只有android 2.3以上才有该接口

                4  调用java 的方法: nbtstat/arp,一般android不支持这两个命令

                5  调用Linux的busybox:
                        busybox ifconfig,查看结果中的HWaddr

                6  根据IP地址获取MAC地址 :



                参考:
                        https://www.cnblogs.com/Amandaliu/archive/2011/11/06/2238177.html
                        http://blog.csdn.net/baidu_34012226/article/details/72627564




System.reset()[mNetwork.getLocalHardware()]-System.scanThemAll()-->NetworkRadar.onNewTargetFound.synScan-->Nmap.async-->Tool.async()--ChildManager.async()[此处传入的Receiver的属性Target就带有mac地址]

你可能感兴趣的:(安全--中间人攻击--cSpolit:)