Linux (x86) Exploit Development Series 阅读笔记level1 Classic Stack Based Buffer Overflow

python –c ‘print “a”*100’ 老是忘记怎么敲XD

Level 1

//vuln.c 
#include <stdio.h> 
#include <string.h> 

int main(int argc,char * argv []){ 
        / * [1] * / char buf [256]; 
        / * [2] * / strcpy(buf,argv [1]); 
        / * [3] * / printf(“Input:%s  n”,buf); 
        返回0; 
}

编译命令:

#echo 0> / proc / sys / kernel / randomize_va_space 
$ gcc -g -fno-stack-protector -z execstack -o vuln vuln.c #-fno-stack-protector 禁用栈溢出检测功能 #-z execstack 支持栈段可执行
$ sudo chown root root 
$ sudo chgrp root root  
$ sudo chmod + s vuln  #y意思是给权限。。
Return Address Overwrite #意思就是覆盖返回地址
gdb反汇编一下
$gdb
$file vuln
$disassemble(+Tab) main
一大船汇编代码
Test Step 1: Is Return Address Overwrite possible? #感觉这个挺好的

$ gdb -q vuln  #使用quiet模式,不打印介绍和版权信息?尝试了不加-q 出来一大串东西 果然够quiet
Reading symbols from /home/sploitfun/lsploits/new/csof/vuln...done.
(gdb) r `python -c 'print "A"*300'` #r的意思是run `python –c 'print "A"*300'` 反单引号,太迷了
Starting program: /home/sploitfun/lsploits/new/csof/vuln `python -c 'print "A"*300'`
Input:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) p/x $eip
$1 = 0x41414141
(gdb)
报错了,Program received signal SIGSEGV, Segmentation fault
image
Test Step 2: What is the offset from Destination Buffer? #偏移了多少呢?之前是通过qira查看,学习一下gdb调试

堆栈布局显示返回地址位于距目标缓冲区'buf'的偏移量(0x10c)处。0x10c计算如下:

0x10c = 0x100 + 0x8 + 0x4

  • 0x100是'buf'的大小
  • 0x8是对齐空间
  • 0x4是呼叫者的EBP

因此用户输入形式“A”* 268 +“B”* 4,用“A”覆盖'buf',对齐空间和呼叫者的EBP,并用“BBBB”覆盖返回地址。???????

怀疑什么保护没关,一直没法覆盖ret addr

-w的意思是关闭编译时的警告

gcc -Wall -g -fno-stack-protector  -o vuln vuln.c -m32 -Wl,-zexecstack

sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'   #禁用ASLR
在昨晚的尝试中,我忽然明白了,给你的建议,一定是有道理的。 #踩坑
Ubuntu 16.04自带的gcc是5.0版本,安装gcc-4.8并切换版本后,-m32选项始终报错 objdump 看过之后,libxxxxx.a的版本是32位的
那么究极解决方案就是 安装ubuntu 14.04。
image
然而寻找返回地址,没提怎么找到的,写的脚本也看不很懂


原文地址:https://www.cnblogs.com/rookieDanny/p/8552731.html