美文网首页
安全--中间人攻击--cSpolit:

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

作者: 慢牛策略 | 来源:发表于2018-03-14 15:21 被阅读335次

    安全--中间人攻击--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 git@github.com: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 <android/log.h>
                    #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 <android/log.h>
        #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:

          本文链接:https://www.haomeiwen.com/subject/lwmfqftx.html