CTF | 0ctf 2017 babyheap

0ctf 2017 babyheap writeup 有关 fastbin attack 利用 稍微复习一下 fastbin attack 利用思路: 覆盖 got 表劫持控制流 覆盖栈上函数返回地址,然后ROP劫持控制流 覆盖 malloc_hook、覆盖 _IO_FILE 等方式劫持控制流 没有开 FULL RELRO 的话,就可以考虑修改 got 表内容 算是很经典的一道题了吧 先分析一下程序 allocate: 最大0x1000 fill 关键! 没有设置字符串结尾,而且长度并不是之前 chunk 分配时指定的长度,是自己指定的,所以这里就出现了任意堆溢出的情形。可以用来泄露libc地址,以及构造fake chunk dump 输出对应chunk的内容 free 释放堆块,清空 inuse,size,ptr chunk 结构: +---------|---------+ |prev_size| size | |---------|---------| | fd | bk | |---------|---------| | data | +---------|---------+ chunk 包含三个字段: inuse size ptr 题目中 fill 存在堆溢出,可以写任意长度,注意分配使用的 calloc ,在分配的时候会将分配出来的 chunk 先清空,dump 的大小是根据 alloc 指定的 size 决定的,跟真正的 chunk 大小无关。...

CTF | srop 利用

SROP(Sigreturn Oriented Programming) SROP signal 机制 32 位的 sigreturn 的调用号为 77,64 位的系统调用号为 15 过程: 推荐看 angelboy 的 ppt x86 mov eax,0x77 int 0x80 x64 mov rax,0xf syscall 利用要点 利用 sigreturn ,构造 syscall 控制所有寄存器 控制 ip 和 stack 需要足够的栈空间保存 signal frame 直接伪造 sigcontext 结构,全部 push 进 stack 将 ret address 设在 sigreturn syscall 的 gadget 将 signal frame 中的 rip(eip) 设在 syscall sigreturn 回来后就会执行我们自己构造的 syscall 要求 利用栈溢出控制栈内容 相应的地址 ‘/bin/sh’ signal frame syscall sigreturn 系统调用链 控制栈指针 rsp 把原来 rip 指向的 syscall gadget 换成 syscall;ret gadget 基本思路:首先构造一个 fake signal frame 写入内存中,将然后将 RSP 指向这段空间,再发送 rt_sigreturn 信号( 利用 eax 和 syscall 调用 sigreturn 控制 rax=15 32位是 0x77)。此时,内核会将构造好的 fake signal frame 取出,恢复。恢复后类似于ROP的方式,为 syscall 调用 execve...

android | 手机应用开发基础知识

关于 android 基本 UI 界面设计的常用空间等内容 记得修改 build.gradle 文件 android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成。 打开 res/layout/*.xml 进行布局,首先看到图形显示界面为空白。 修改 res/value/styles.xml stackoverflow UI 设计 ConstraintLayout 约束布局 形式:app:layout_constraint[组件本身的位置]_to[目标位置]Of="[目标id]" 1:设计和蓝图:选择您想如何在编辑器中查看您的布局。设计视图显示一个颜色预览你的布局,而蓝图视图显示只对每个视图轮廓。或者你可以查看设计+并排蓝图. 提示:您可以按下B就这些视图之间切换。 shape 自定义圆角按钮 事件处理 Intent、Bundle 的使用以及 RecyclerView、ListView 的应用 Intent mIntent = new Intent(this,SerializableDemo.class); Bundle mBundle = new Bundle(); mBundle.putSerializable("data",object); mIntent.putExtras(mBundle); startActivity(mIntent); 取值 Bundle bundle = this.getIntent().getExtras(); broadcast 静态广播 动态广播 发送广播:将数据装入一个Intent对象,调用Context.sendBroadcast() 方法发出去。 接受广播:所有已经注册的 BroadcastReceiver 会检查注册时的 IntentFilter 是否与发送的 Intent 相匹配,若匹配则就会调用 BroadcastReceiver 的 void onReceive(Context curContext, Intent broadcastMsg)...