美文网首页
XMAN夏令营学习简记

XMAN夏令营学习简记

作者: cceb9d5a8577 | 来源:发表于2018-08-11 19:50 被阅读240次

    day1

    讲了ctf的历史以及其发展,然后按流程走讲了一下网络安全法
    基本没学什么,主要是熟悉华为的环境,面基,破冰


    day2

    逆向教学:

    1.符号执行
    接触了angr的用法,简单的自动逆向方法,只适用于简单的加密过程,可小学一波用于日后做题取巧
    https://github.com/a7vinx/angr-doc-zh_CN
    https://www.anquanke.com/post/id/85039
    http://www.freebuf.com/sectool/143056.html
    https://www.cnblogs.com/fancystar/p/7851736.html

    2.动态解密:第一次见识到有需要解密源二进制的操作,就是代码经过顺序执行后导致后面的某些关键代码被破坏,需要通过解密来恢复原来的二进制结构,从而能正确的分析程序的意图

    3.IDA-Python :同样也是第一次见识到IDA中还能操作py脚本,大概是通过py脚本,获得、修改二进制文件中的地址,函数等,通过骚操作,可以实现直接执行动态解密,直接在ida内运行py,输出我们所需要的东西
    https://www.hex-rays.com/products/ida/support/idapython_docs/
    http://drops.xmd5.com/static/drops/tips-11849.html
    https://cartermgj.github.io/2017/10/10/ida-python/

    4.无法反编译的情况:
    今天见识到的有两种情况:
    ①是因为有动态加密,导致的后面的代码不完整,因此报错无法反编译
    ②是一种比较比较玄学的情况,根据其报错,找到相应的位置,对一些栈操作的指令(如pop,mov等)进行修改,快捷键alt+k,修改为IDA所提示的值,即可修复成功进而反编译




    5.做题前的信息收集:
    遇到几千个函数的二进制文件,有可能能在网上搜索到原码,github,google
    binwalk、string、file、有可能一个二进制里面藏了另一个二进制,需要注意混合了misc的情况


    day3

    upx脱壳,dd命令方法
    隐藏代码,
    xtea加密
    在IDA中修改调用约定,解决某些函数反编译失败的情况
    通过一大堆的格式化字符串变相得表达一个c语言程序
    也就是用一堆的格式化字符串表达底层汇编的mov指令等,组合成一个汇编语言

    pwn题 漏洞挖掘:
    缓存区溢出:堆、栈溢出,bss溢出,data溢出
    wellpwn、ALICTF 2016

    整数溢出:
    无符号和有符号的转换,整数加减乘除,
    malloc(size2)可以通过巧妙构造size导致size2为0

    格式化字符串:
    MMACTF 2016 greeting
    HCTF2016 fheap

    UAF:
    double-free
    defcon 2014 qualifier shitsco

    逻辑漏洞:
    访问控制,协议漏洞,多线程竞争条件等

    漏洞挖掘中的逆向技巧
    理清楚:数据结构,接口,类,
    进行程序控制流的分析,数据流分析
    对目标文件小的文件进行全面的逆向分析
    对目标文件大的文件的关键点进行重点分析,比如用户交互的地方
    在IDA中学会标注结构体和把反编译代码标注成最简洁的样子

    day4

    安卓逆向学习:
    安卓系统大致分四层结构
    linux kernel层
    硬件抽象层
    ....

    安卓利用分配UID来区分应用程序

    常用工具与环境:
    santoku
    基于linux的Android取证、逆向、开发平台

    Android studio
    Android 应用开发
    apk分析、性能分析

    jeb
    Android逆向工具
    支持无原码调试
    提供ARM、MIPS、intelx86、x64反编译支持

    fadx 开源的dex文件反编译工具

    smali、baksmail、apktool

    apk
    本质上是一个压缩包
    常见的文件:
    manifest.xml
    META-INF目录
    classes.dex:java代码编译后生成的可执行文件
    res目录
    assests目录
    lib目录:存放c、c++代码编译后的so文件

    反编译
    dex文件:
    Android可执行文件,java代码编译而来的,包含dalvik指令集

    dex文件的结构:


    header
    string_ida
    type_ids
    ....

    classes

    data


    smali代码:由字节码反汇编得到的可阅读代码
    每个smali文件代表一个类(普通类、抽象类)
    开头
    .field字段
    .method方法定义

    JNI
    java和Native沟通的桥梁
    JNI的注册
    JNI_OnLoad:在加载so的文件的时候被执行

    安卓提供的动态加载方法
    DexClassLoader:apk、jar、dex,可以在SD卡加载

    动态调试:
    Android debug bridge

    JDWP(java调试线协议)

    动态调试的条件:
    Android:debuggable="true"
    android os
    ro.debuggable=1
    boot.img->default.prop
    模拟器 或者 userdebug编译
    mprop、BDOpner(Xposed模块)

    无源码动态调试(Java层)
    smalidea
    IDA Pro
    JEB
    Native代码调试
    IDA Pro

    方法跟踪:
    method tracing
    DDMS
    CPU Profile
    可以记录函数调用、CPU耗时信息
    原理:instrumentation listeners

    脱壳技术
    dex文件加载
    类加载
    方法执行

    针对内存加密壳的脱壳技术
    暴力内存搜索
    关键函数断点
    DexHunter
    APPSpear

    dex加载流程

    生成dex时

    关键函数脱壳点

    反混淆:
    simplify
    动态执行去初花指令

    名称混淆
    根据类型信息重命名
    Demo 360 renameByType


    day5

    pwn之栈溢出教学

    IDA--options--general---勾上line prefixes(graph)
    可以在流程图中显示出地址,方便操作复制地址

    https://github.com/Escapingbug/ancypwn
    大佬自己写的集成了各种工具的docker,orz

    gef操作:

    下断点: b 【函数名】、b *【地址】
    显示所有的断点: info b
    hb 软件断点
    d 删除断点

    r 完整地重头启动

    在等待输入的时候按下ctrl +c可以在当前位置断点

    c 继续执行
    s 单步执行(进入函数)

    n 单步执行,跳过函数内部

    gdb-python:
    查询常见命令:gdb cheatsheet

    GDB可以有符号,编译的时候记得带-g参数可以让编译带一个debug信息

    libc source

    context(os="",arch="i386",log_level="debug")

    cyclic pattern(cyclic(), cyclic_find() )
    查看字符串的溢出

    fmtstr_payload()

    %m$x (m是一个十进制整数,表示第几个参数)
    以16进制读出第m个参数

    printf_chk 可以防御,加强了%m$x和%n(直接禁止使用)
    但是无法防御读取

    canary最后一个字节一般是0,用来截断
    操作系统负责生成canary,放在一个不可读的寄存器上面

    ret2dlresolve
    适用情况:没有libc地址,需要调用外部函数,控制了已知地址内容

    elf文件源代码:
    https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/elf.h
    glibc源代码:
    https://code.woboq.org/userspace/glibc/libio/libioP.h.html#_IO_jump_t

    将libc源码加载如gdb中进行调试:
    先将libc源码下到本地
    git clone git://sourceware.org/git/glibc.git cd glibc
    $ git checkout --track -b local_glibc-2.23 origin/release/2.23/master

    然后调试的时候 用dir命令:dir 后加你glibce文件的地址


    day6

    pwn之堆教学;

    fast bi attack
    关键点是控制fd指针
    单链表只有一个fd指针

    UAF:
    Double free:fast bin dup
    检查:size检查
    溢出改写:GOT、top_chunk、hook

    unsorted bin attack
    控制bk指针
    通常改写global_max_fast
    最终达到效果:addr=mian_arena+0x58

    small bin attack
    伪造fake chunk 让fake chunk的fd指向victim
    改写victim的bk为fake chunk
    就可以把fake chunk放入对应的small bin
    下次malloc 就可以分配到fake chunk的地方

    large bin attack
    出现在从unsorted bin 放入 large bin的过程中

    改got表一般用atoi和free
    free_hook改为system
    malloc_hook改为onegadget
    利用malloc_Printerer实现one_gadget

    利用misalignment伪造size
    利用fast bin attack 在main arena 写size
    利用fast bin attack 改写top chunk ptr


    DAY7 PWN 之 IO FILE

    HITCON CTF 2016
    pwnable,tw seethefile
    WCTF 2017

    fread()
    fwrite()
    fopen()

    网上教程:
    https://xz.aliyun.com/t/1767
    https://www.slideshare.net/AngelBoy1/play-with-file-structure-yet-another-binary-exploit-technique
    https://www.cnblogs.com/elvirangel/p/7843842.html
    https://www.anquanke.com/post/id/87194
    https://www.jianshu.com/p/2e00afb01606

    额外学习一波python沙箱逃逸:
    https://www.anquanke.com/post/id/85571
    https://xz.aliyun.com/t/52#toc-10

    小记一波提权 操作:https://xz.aliyun.com/t/2512


    DAY 8

    WINDOWS PWN

    工具:
    winDBG
    x64 DBG
    Mona

    PE文件结构:
    header
    import address table
    export address table
    section tabel
    .....

    基础dll:
    NTDLL.DLL
    KERNEL32.DLL
    USER32.DLL
    MSVCTXXX.DLL

    SEH结构:
    Prev
    hander

    seh:
    https://www.52pojie.cn/thread-630505-1-1.html
    https://blackperl-security.gitlab.io/categories/windows-pwn/

    win syscall table
    https://j00ru.vexillium.org/syscalls/nt/32/

    win shell
    system("/bin/sh")
    system("cmd.exe")--->msvcrxxx.dll
    CreateProcessW--》kenal
    ntdll

    Awesome Windows Exploitation
    https://github.com/enddo/awesome-windows-exploitation

    今天顺带的完成了一道pwn题,知识点是有关canary的:
    日后有时间一定要系统地总结一波,现在先贴一些做题的时候找到的资料吧
    https://0x48.pw/2017/03/14/0x2d/
    https://hardenedlinux.github.io/2016/11/27/canary.html
    https://veritas501.space/2017/04/28/%E8%AE%BAcanary%E7%9A%84%E5%87%A0%E7%A7%8D%E7%8E%A9%E6%B3%95/
    http://html.rhhz.net/buptjournal/html/2017s127.htm


    DAY 9--------- last teaching day

    漏洞挖掘

    0x01数据流分析

    https://firmianay.gitbooks.io/ctf-all-in-one/content/doc/5.4_dataflow_analysis.html

    0x02 符号执行

    0x03 Angr
    https://stfpeak.github.io/2017/11/08/use_angr_for_ctf/

    0x04 Pin

    https://blog.csdn.net/qq_33438733/article/details/81108186

    0x05 Fuzzing

    基本原理:
    一般用于输入非预期的的数据监控输出异常
    用于模糊测试来发现故障

    https://github.com/shellphish/fuzzer

    0x06 etc

    ipython写脚本自动化挖洞

    https://github.com/ChrisTheCoolHut/Zeratool

    0x07 lazy IDA
    https://github.com/L4ys/LazyIDA


    DAY10 打个人排位赛

    被自己菜哭,最后排名75,main那题没做出来有点伤,如果做出来了就能排进前30了,可惜没如果。然而比赛结束后就搞出来了orz。。。唉还是自己太菜了


    DAY11 交流与总结的一天

    主要是大佬们上去给我们讲讲他们做题的思路
    然后就是讲讲赏金猎人开始了,要准备挖洞了,然而我一点都没有接触过这玩意,很慌orz
    然后讲了一下接下来的行程安排,说明天放假一天,然而菜鸡如我是不可能放假的,还得好好总结一下这十天来的所学

    有关FRC漏洞的一些网址:
    https://www.cnblogs.com/SecurityKid/p/7751802.html
    http://www.freebuf.com/articles/web/111139.html
    http://blkstone.github.io/2017/05/28/finding-src-vuls/
    https://wizardforcel.gitbooks.io/ctf-field-guide/content/7.html


    DAY 12

    休息日,无事,学习总结


    DAY 13 安卓应用常见漏洞挖掘

    文件存储

    • 内部存储
    • 外部存储
    • 外置存储
    • 私有/共有存储

    应用的私有目录:
    /data/data/appname/

    • database :数据库
    • cache 缓存数据
    • files 自己控制 的文件

    应用沙箱:

    • 在安装阶段,Android自动给每个应用分配UID,关联GID
    • 应用执行的时候以该UID运行
    • 每个应用只有他可以进行读写的专用数据目录
    • root用户的UID为0
    • 系统服务的UID从1000开始,system用户的UID为1000,应用程序从10000--19999
    • 同签名应用程序可以用使用同一个UID安装,从而共享文件

    权限:

    • 安装的时候申请的,之后不能改变,除非动态申请
    • 应用通过在AndroidManifest.xml文件内添加<uses-permision>标签来申请权限
    • 通过<permission>来添加

    权限保护级别:

    • Normal级别
    • Dangerous级别
    • Signature级别
    • signatureOrSystem权限

    四大组件:

    • Activity:
      • 在AndroidManifest.xml中声明
    • Service
      • 与Activity相似,一直在后台运行,没有用户界面
    • Content Provider
      • 不同app之间交换数据的标准API
    • Broadcast
      • 跨进程的消息收发机制

    讲了很多工具的使用,懒得提及了,都是暂时用不到的,没有安卓的底子,根本看不懂挖洞的操作。。。
    我还是老老实实自己偷偷学pwn吧


    DAY 14 参观华为各个地方,华为各种介绍吹水招聘的内容

    无事


    DAY 15 无线电安全

    来自360的讲师讲了一下无线电

    介绍了很多发射接收的硬件
    演示了很多骚操作,追踪飞机,逆向遥控信号,见识了很多
    攻击闸站,太秀了

    软件:universal rasio

    硬件:电视棒,HACKRF,BladeRF,

    GPS劫持demo:GPS导航欺骗手机,欺骗汽车,无人机

    伪造基站

    操作太多太秀了,而且搞不好很容易就进去了。。。。还是老老实实搞pwn吧

    硬件底层的hacking操作:
    不存在的,就是讲了一下午低配版的电子电路。。。。。

    然后讲了一波的无线测向,也就是高配版的定向越野、、、、


    DAY16

    硬件安全

    破解自动贩卖机,柜子锁,汽车车门,各种终端机
    伪造GPS,劫持流量,伪基站
    无线部分内容跟昨天的差不多

    接着后面介绍了一些生物特征的,如指纹,虹膜等加密过程,以及绕过验证

    都是讲座型天秀课程,听听就完事了

    安卓nativelib、kernel、fuzz、调试和利用

    今天下午是来自腾讯玄武实验室讲师进行饶舌

    安卓nativeleib和kernel的简介和攻击面

    • 安卓底层的安全架构简介
    • 安卓完整系统原码

    常见的fuzz技术

    • AFL
    • Syzkailer

    漏洞的调试和利用

    • bluebome
    • dirtycow

    安卓常见fuzz方法和搭建
    AFL

    • 暴力 fuzzer
      syzkaller

    DAY 17 无线网络的攻与防

    启动和配置网卡:
    iwconfig
    arimon-ng start 【wlan0】
    airmon-ng check kill 关掉影响网卡的进程

    kali下暴力破解wifi


    DAY 18、19 转移阵地去东莞松山湖

    这两天是咸鱼的两天,学的东西比较少,也趁机颓废放松了一波
    过几天就打结营赛了,还是线下赛的形式,真让人害怕。。。。

    相关文章

      网友评论

          本文标题:XMAN夏令营学习简记

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