缓冲区溢出练习
前提准备:
关闭Linux中的ASLR
补充:ASLR(Address Space Layout Randomization)即地址空间布局随机化
aslr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。如今Linux,Windows等主流操作系统都已采用了该技术。
关闭ASLR
sudo -i
echo 0 > /proc/sys/kernel/randomize_va_space #赋值0表示关闭
cat /proc/sys/kernel/randomize_va_space #查看是否生效
开启ASLR如下:
echo 2 > /proc/sys/kernel/randomize_va_space #赋值0表示关闭
当前程序为32位linux可执行文件

添加权限后执行该程序

chmod +x server_hogwarts
./server_hogwarts

尝试连接该端口
nc 127.0.0.1 9898

启动debugger调试工具,

尝试生成500个X

注入到程序中

打开debugger调试工具发现EIP和ESP都被替换成了X

补充:
在EIP寄存器里面插入一个jump to ESP的指令,找到EIP这个寄存地址,通过这个地址来。EIP寄存器中的内容会被计算机当成下一条要执行指令的内存地址,进而执行ESP中指定的代码。可以将反弹shell注入到ESP中。
函数栈&EIP、EBP、ESP寄存器的作用
参考链接:https://www.k2zone.cn/?p=1911
EIP替换内容为十六进制

随机生成500个字符分析

重启debugger调试工具以及重新启动服务nc连接。注入随机字符

分析注入字符,将EIP中的十六进制转换为字符串得知,EIP中的内容为dA7d

计算偏移量

得知是从112位开始,再后面新增占位符

重新debugger发现EIP刚好被B*4替换

Debugger找到ESP--->EIP
Jump 到esp的内存地址为0x08049d55
在内存中表现为从高地址往低地址增长

之前得知是32位可执行文件,这里使用msfvenom生成32位反弹shell

编写exp,监听5555端口,执行./exp1.py

反弹shell成功


浙公网安备 33010602011771号