CTF | IO_FILE 相关利用

IO FILE 利用 seethefile 分析程序 首先看程序 openfile:读取 长度为63 filename,打开文件,这里有溢出,因为 filename 大小为 40,但是不能覆盖到fp writefile:输出文件 magicbuf,通过这个应该能泄露地址,首先要把内容写道magicbuf readfile:从文件中读取内容到 0x18 长度 closefile: 这里会调用 fclose 函数,可以用来触发 exit : 这里 name 有溢出。可以覆盖到fp,使之指向我们伪造的fp,在调用fcolse时调用system("bin/sh") bss data laylout .bss:0804B080 filename db 40h dup(?) ; DATA XREF: openfile+53↑o .bss:0804B080 ; openfile+6D↑o ... .bss:0804B0C0 public magicbuf .bss:0804B0C0 ; char magicbuf[416] .bss:0804B0C0 magicbuf db 1A0h dup(?) ; DATA XREF: openfile+33↑o .bss:0804B0C0 ; readfile+17↑o ... .bss:0804B260 public name .bss:0804B260 ; char name[32] ....

CTF | 逆向入门第二篇

逆向入门第二篇 hide strings 查看到有壳upx 3.91 脱壳 不能使用upx -d 直接脱。 运行起来相当于脱壳看,因此可以用 dd 把data和text两段dump下来之后拼在一起,可以在IDA里面看。但实际上文件结构会被破坏,因为是运行时镜像,动态脱壳都有这样的问题。所以动态调试还是使用有壳的。dd cat /proc/(pid hide)/maps 可以查看进程的内存映射 脱壳命令,其中的地址就是各段的地址,因为是静态的,因此都是不变的,可以直接复制: sudo dd if=/proc/$(pidof hide)/mem of=hide_dump1 skip=4194304 bs=1c count=827392 sudo dd if=/proc/$(pidof hide)/mem of=hide_dump2 skip=7110656 bs=1c count=20480 cat hide_dump1 hide_dump2 >hide_dump 看到别人说gdb dump binary 更方便,不过没试过(不会) ptrace反调试 ptrace介绍: ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。使用ptrace,你可以在用户层拦截和修改系统调用(sys call),修改它的参数,插入代码给正在运行的程序以及偷窥和篡改进程的寄存器和数据段。 使用strace ptrace 相关的反调试 需要把反调试过掉 gdb 中 catch syscall ptrace 设置断点 可以发现程序在cmp eax,0 处断下,此时通过set $eax=0,使程序可以往下执行。 c ,再修改一次,就可以成功过掉反调试了>< 队友说,ptrace 大概就是看eax有没有改变?一般就是cmp eax,0的地方了 附gdb 操作 hb *0x start地址 下硬件断点 record full (只有在静态执行时有用) 之后可以倒着执行也可以正着执行 rsi ni si reverse-continue 倒着执行回到上一个断点 ELF:init区,在main 执行前会执行 字符串交叉引用 enter flag 看到哪些地方引用,找到藏起来的代码 p 出来F5有问题,算是IDA的bug吧。...

CTF | 逆向入门第一篇

跟着萌新一起逆向入门呦。包括:基本知识点,简单题例子,常见操作 先来过一遍知识点吧! 工具介绍 Disassembler 反汇编器 Tracer 记录运行的过程,如函数,指令 Debugger 调试器 Decompiler IDA、geb(支持mips、web assembly?) Emulator (qemu 模拟执行)知道CPU状态 Symbolic execution 符号执行 angr、路径爆炸 具体工具 IDA 支持脚本、手工定义的反汇编规则 Geb 逆安卓 mips web*** Binary ninja 不支持反编译,api好用,通常提供静态分析 R2 命令系统奇怪,支持以太坊智能合约 Retdec capstone 常规逆向 ELF/PE/Mach-O file with x86/x64/arm 此外还有一些非常常规逆向,比如…不说啦哈哈哈哈 逆向的一般步骤:信息收集->定位关键代码->分析* 信息收集 Strings(搜看看有没有源码..)/ binwalk file ida -> google/github 例子 CISCN 2018 re 酷狗音乐盒 定位关键代码 根据控制流 Data 交叉引用 代码交叉引用 Memory searching +r/w breakpoint.输入数据 内存搜索 记录地址 对该地址下断点 读写断点(保证运行地址不变?) Tracing 例子:youku client reversing 分析代码 Tips...