第一步:在二进制文件编译完成后,二进制文件的PLT表在0x80482b0处,留出了一个指向GOT表的0x80496f8指针。由于编译完成后PLT的值无法修改,所以在动态链接时,链接器将动态库的真实逻辑地址填到GOT表,使得程序在真正运行时,可以找到每次运行都随机分配内存位置的动态库。
第一次做正经的CTF练习,花了点时间做这道逆向,记录一下。
下载下来是一个压缩包,解压有两个文件: reverseme-x86和reverseme-x86_64,为了省事就做reverseme-x86了。
用file看了一眼
reverseme-x86: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamical......
小记一下第一次成功的逆向,eshard培训作业ARE-4中获取key程序的序列号。
练习目标是通过使用panda-re工具(QEMU的套件),通过查找QEMU中寄存器状态,获得输入字符匹配时,PC指针的值,顺着找到代码中的程序行,接着找到程序验证序列号的代码,逆向后破解。
具体过程:
0x00 下载编译panda-re
根据官方repo可以在Ubuntu 16.04上轻松的编译成功。不......
逆向做linker的注入,非常有意思。
linker是在程序运行的时候,在OS层面上链接程序所需动态库的程序,C程序通常由GLIBC在/usr/lib或/lib下的ld.so担当。一个通常的,基于Linux x64架构的程序,file abc的信息会是
abc: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamica......
在做逆向作业的时候遇到一个问题:把从内存读回的数据用
char a[1000]
LOOP
printf("%x",a);
的方式输出到屏幕,再转储成二进制的话,总会出现数据丢失的情况。由于输出文件是一个MP3文件,一旦有数据丢失就意味着文件结构破坏,无法解析。
后来发现使用
LOOP
printf("%c",a);
的方式打印,直接......
尝试复现Bypassing ASLR – Part I中的实验,在Kali x64和Ubuntu 16.04.2 x64上均失败,在nebula live CD(Ubuntu 11.10 x86)上完全成功(连偏移地址都完全一致,代码直接复制使用)。作者使用的是Ubuntu 12.04 x86环境,因此符合预期。
脆弱代码:
#include <stdio.h>
#includ......
路由上俩虚拟网段:
192.168.3.0/24,网关192.168.3.1
192.168.10.0/24,网关192.168.10.1
两个网段互通,因此机器之间可以相互ping通。
然而在192.168.3.76的机器上以桥接方式假设的虚拟机(192.168.3.57),却无法被192.168.10.11的机器ping通。反之,192.168.3.57也无法ping通任何在192.1......
缓冲区溢出的基础前提,在于可以通过控制strcpy()或strcat()甚至printf(),来覆盖堆栈里的返回地址。之前的实验里,其实只实现了最简单的溢出方式,即跳转的地址在当前程序栈(text segment)内,也就是只能执行程序内存在的功能,攻击的效果有限。更普遍的堆栈溢出攻击,应该是能够任意代码执行,也就意味着能够调用自定的攻击函数。
严格说来,溢出跳转应包含几个层次:
跳转目标......