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