23R3F's Blog

xman夏令营学习简记

字数统计: 3.3k阅读时长: 12 min
2018/08/21 Share

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

去东莞松山湖

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

CATALOG
  1. 1. day1
  2. 2. day2 逆向教学:
  3. 3. day3
  4. 4. day4 安卓逆向学习:
  5. 5. day5 pwn之栈溢出教学
  6. 6. day6 pwn之堆教学;
  7. 7. DAY7 PWN 之 IO FILE
  8. 8. DAY 8 WINDOWS PWN
  9. 9. DAY 9——— 漏洞挖掘
    1. 9.1. https://github.com/L4ys/LazyIDA
  10. 10. DAY10 打个人排位赛
  11. 11. DAY11 交流与总结的一天
  12. 12. DAY 12
  13. 13. DAY 13 安卓应用常见漏洞挖掘
  14. 14. DAY 14
  15. 15. DAY 15 无线电安全
  16. 16. DAY16
  17. 17. DAY 17 无线网络的攻与防
  18. 18. DAY 18、19 转移阵地