xman夏令营学习简记

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——— 漏洞挖掘

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文件内添加标签来申请权限
  • 通过来添加

权限保护级别:

  • 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 转移阵地

去东莞松山湖

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