20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

shellcode注入实践

编写shellcode

编写shellcode已经在之前的实验中搞定啦,这次直接用成品咯~

准备工作,设置环境

基础——Bof攻击防御技术
· 从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。
· GCC中的编译器有堆栈保护技术(结合CPU的页面管理机制,通过DEP/NX用来将堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。)
· 此时就需要手动设置环境,如下所示:

apt-cache search execstack
apt-get install execstack
execstack --help
execstack -s pwn1    //设置堆栈可执行
execstack -q pwn1    //查询文件的堆栈是否可执行

构造要注入的payload

· 在Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcodenop+shellcode+retaddr``。因为retaddr在缓冲区的位置是固定的,shellcode可能在它前面或者后面,或者说缓冲区小就把shellcode放后面,缓冲区大就把shellcode放前面。 · 我们还是尝试对于pwn1用nop+shellcode+retaddr`的方法

payload结构为nop+shellcode+retaddr

· 编写payload

需要注意的是:千万不能以\x0a作为结束。因为\x0a相当于回车,如果回车了下面的操作就gg了。

· 打开一个新终端(终端2),将payload注入到pwn1中。注意一定不能多敲回车。
· 在终端中输入(cat input_shellcode;cat) | ./pwn1

· 保持终端2中程序的运行状态。

终端1中查询pwn1进程的UID

gdb调试,进入对应UID端口


反汇编,设置断点

ps:continue执行的时候,在终端2敲一下回车,终端1中的continue就会暂停在断点处了~

往上查询找到shellcode,同时找到要覆盖的地址



要覆盖的地址(返回地址)是0xffffd32c

重新构造payload

成功啦!

return-to-libc实验

首先需要配置32位linux环境

sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev

这里简直有毒[smile],我安装的时候总是报错,上网查了一下需要先apt-get update还有apt-get upgrade一下,然后吧我就开始在终端搞了,然后吧我嫌弃网速太慢就开了个热点,当时瞟了一眼看到的是17.1M,觉得没啥嘛反正月底了。然后[smile],我就收到了流量超量提醒,用了6G,手动再见。
这个故事告诉我们,开热点做实验很容易手滑。

添加新用户

· 因为最后的是要通过看“是否取得root权限”来判断成功与否的,所以攻击对象不能是root用户,要创建一个新用户。

设置实验背景

· 进入32位环境,关闭地址随机化,设置zsh程序代替/bin/bash

· 在/tmp文件夹下编写漏洞程序retlib

· 在root用户下编译,关闭栈保护机制,并设置SET-UID

在/tmp文件夹下编写getenvaddr和exploit

· 用来读取环境变量的代码getenvaddr:

上图手滑了好几处,正确的代码应该是长这样的:

· 用来攻击的代码:exploit

· 也是在root用户下编译的

获取地址并修改exploit

· 获取BIN_SH地址

· 进入gdb设置断点,调试运行获取system和exit地址

· 将上述三个地址修改入exploit.c文件

最后~攻击,over

先运行exploit再运行retlib就可以可获得root权限,成功!

实验感想

心好累,我的流量一去不复返了。操作中很多细节的地方需要注意,比如多一个少一个回车的问题,就很容易有影响。我第一次做的时候因为直接在pwn1的文件上做了,但是又从头来过,所以就很尴尬的是,pwn1文件已经被修改了,所以我从码云上下载了新的pwn1文件,但是权限有问题,需要先chmod u+x pwn1改一下它的权限之后才可以继续往下做,之前拷贝的老师的虚拟机应该是已经更改过权限的~这个故事告诉我们,做实验的时候还是先拷贝一下比较好,或者来个虚拟机快照之类的也不错~谁知道哪天就崩了呢。

posted @ 2017-03-31 00:55  夏艺华20145226  阅读(320)  评论(0编辑  收藏  举报