MozhuCY's blog.

MozhuCY's blog.

NO BIN NO FUN

写在前面
2019-7-28手动置顶一下(x今天把mac玩炸了,那台的blog也没了,blog也好久没更了,最近写了大概6篇东西也没有发出来,今天配好环境,出来发一下 之前的日期全都消失掉了,所以可能会有很神奇的东西出现在随机的位置,自己也没有记住大概日期,有需要的师傅随便看下好了.. 今后应该是除了CTF开始整理一些漏洞挖掘方面的东西了,以及一些好玩的逆向技术 挖坑待填: Mshell (doing) Android (doing) angr/braf anti ollvm 2019-7-29C++ lambda (函数式,闭包 这也是之前看了的但是没有记录的东西,在这里写一下 1234au...
syscall
syscallsyscall是用户与内核通信的唯一方式,一般层级关系是这样的 elf->glibc->kernel 打pwn的时候,也经常会用到syscall/int 0x80这样的来写shellcode 但是在x86_64下,系统调用变成了syscall,与32位不同的是,这里的syscall,并不是归为中断处理的 int 0x80是一个软中断(软件中断),内核为syscall维护了一个中断向量表,会根据调用时EAX的值,来选择子过程 syscall在调用时,会将return address存储到rcx中,然后将eflags保存到r11寄存器里,并且更改RF位,然后从sta...
socket_ipc
socket常用的socket函数: socket:创建socket,返回一个fd bind:绑定一个端口/ip UNIX绑定一个文件 listen:监听端口,设置等待队列的长度 accept:接收请求,返回fd,可以使用read/write与其交互 connect:创建链接,可以拿到fd recv:数据收发操作 IPCLinux上主要采用UNIX域,很像命名管道,要指定文件名等 为什么要用socket: socket原本用于网络通信,用于本地的IPC时,不用加入网络协议中的数据打包,校验等机制,仅仅是通过内核,将数据拷贝到另一处 主要的过程如下,首先socket创建一个socketfd...
mips组件漏洞挖掘.md
对某路由器组件的逆向记录mips架构,使用IDA配合ghidra分析 nmap可以扫描到端口9998,这里开启了一个http服务 定位处理代码后,开始逆向 定位到这里,其中socked_fd是最初初始化时创建的,是一个全局变量,heap_ptr是一个buffer,在此函数头部申请,大小0x353c,在上面有这样一个操作: 12345uVar5 = accept(*(int *)(socket_fd + 4),(sockaddr *)auStack136,&local_114);*heap_ptr = uVar5;...heap_ptr[2] = 0;heap_ptr[0xa4a...
afl-fuzz原理
AFL是现在最热门的fuzz工具之一,自发布以来,通过AFL找到的漏洞不计其数,在近些年,也产生了许多由AFL衍生而来的fuzzer,例如uni-afl,他们都是为了解决不同架构,不同二进制文件产生的. AFL的原理其实很简单,就是变异加上覆盖率的计算,其中,有源码和无源码的fuzz是不一样的. afl-gcc有源码的时候,我们可以用afl-gcc/afl-g++编译源码,afl会在编译的时候以每个基本块为单位,进行代码插桩. 1fprintf(outf, use_64bit ? trampoline_fmt_64 : trampoline_fmt_32, R(MAP_SIZE)); 通...
对于CTF和漏洞挖掘的一些浅显看法
最近在转型实战,在这段期间也体会到了实战与CTF的不同.就像之前学长说过的一样,CTF并不是全部,对于二进制方向来说,CTF中所用到,所学到的东西,更多的是一种工具. 逆向方向在实际的漏洞挖掘中,仅仅是一种辅助手段. 在实战中,逆向是对于一些闭源软件的漏洞挖掘的入口点.只有通过逆向,才能整理出代码的逻辑,结合逆向的知识,一些代码阅读量对于某些闭源软件的实现进行理解. 包括调试,插桩,模拟执行,行为检测,网络监控,其实都是对于不同目标的不同分析方法.CTF中我们了解了这些,但是并不意味着在实战中,我们可以灵活的应用这些方法.所以在转型的期间,就要训练这种能力,改掉在CTF比赛中的一些习惯,...
afl-qemu
qemu user emulation先来了解一下qemu的用户模式,qemu可以单独运行一个其他架构的程序,同时也可以模拟出另一个架构的操作系统,在qemu进行模拟时,实际上存在一个指令翻译的过程,也就是TCG部分 初始化流程: 12345678qemu初始化,参数转储tcg初始化cpu初始化加载可执行文件syscall初始化signal初始化gdbserver初始化(可选项)cpu_loop开始模拟 在这里qemu会分析elf结构,mmap分配内存将所需的库都读入内存,开始翻译->执行,并且在遇到中断时模拟syscall, cpu_loop流程: 12345for(;;)...
公益CTF
这两天打了这个,做了几道pwn EasyVM一个自定义指令集的VM,逆向可以发现几个功能,分别是输入字节码,执行字节码,gift和退出 保护全开,不能写got表.gift给了一个leak,可以直接算出地址,这里梳理出流程直接用z3解了,在字节码中,可以看到getchar和putchar没有检测下标啊,任意地址读写了 直接读malloc的got表,然后leak libcbase,后面直接写free hook为system,然后将R0和R1寄存器写上字符串,触发free 1234567891011121314151617181920212223242526272829303132333435...
CVE-2019-6778
一切皆socketsocket起源于UNIX,可以看出来socket完美的贴合了UNIX一切皆文件的编程思想.我们可以对socket描述符进行ORW的操作,类似普通文件. 在网络编程中,都是由socket实现的,在linux中,socket由上层的libc中的socket和内核中的socket两部分组成,当然为了和硬件交互,最后还需要控制网卡驱动,才是一个完整的体系. 这里我们可以进行一个完整流程的追踪,直接断在tcp_emu上.然后查看调用栈,回溯一下 1234567891011121314151617181920212223242526272829#0 tcp_emu (so=0x...
avatar
MozhuCY
witness me
FRIENDS
RRR Ch1p