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源码下到本地
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 转移阵地去东莞松山湖
这两天是咸鱼的两天,学的东西比较少,也趁机颓废放松了一波
过几天就打结营赛了,还是线下赛的形式,真让人害怕。。。。
网友评论