• 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
    然而寻找返回地址,没提怎么找到的,写的脚本也看不很懂


  • 相关阅读:
    TSQL Challenge 1
    CTE的使用
    编号问题
    C语言结构体(sizeof长度)偏移量的简单研究
    【更新中】树的遍历
    【更新中】C语言语法汇总(仅记录遇到的坑)
    windows修改PowerShell(命令提示符)默认中文编码方式
    “人工智能”并不可怕
    学习《操作系统》收获
    人类大脑只开发了10%? I don't think so.
  • 原文地址:https://www.cnblogs.com/rookieDanny/p/8552731.html
Copyright © 2020-2023  润新知