0%

渗透测试day1

今天看了”渗透测试实用指南”一书,该书介绍了一个学习网站:Over the Wire(http://overthewire.org).该网站是一个在线夺旗挑战站点,专注于二进制攻击到网站攻击所有方面的知识

据初步了解,该网站有着不同系列的试题.在点开试题的链接后,网站会提供一个ssh连接的信息,这样我们就可以在本地终端通过ssh登录到试题的服务器

overthewire_narnia

我这次所学习的试题名为narnia,可以看出,可以使用用户narnia0和密码narnia0登录到服务器

ssh连接至服务器后,切换到/narnia目录,可以看到里面有9个c源代码文件与对应的可执行文件:

1
2
3
narnia0@narnia:~$ cd /narnia
narnia0@narnia:/narnia$ ls
narnia0 narnia0.c narnia1 narnia1.c narnia2 narnia2.c narnia3 narnia3.c narnia4 narnia4.c narnia5 narnia5.c narnia6 narnia6.c narnia7 narnia7.c narnia8 narnia8.c

那么,我们现在开始做第一道题目吧

narnia0

题目

narnia0.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>

int main(){
long val=0x41414141;
char buf[20];

printf("Correct val's value from 0x41414141 -> 0xdeadbeef!\n");
printf("Here is your chance: ");
scanf("%24s",&buf);

printf("buf: %s\n",buf);
printf("val: 0x%08x\n",val);

if(val==0xdeadbeef){
setreuid(geteuid(),geteuid());
system("/bin/sh");
}
else {
printf("WAY OFF!!!!\n");
exit(1);
}

return 0;
}

我们的目的是将val这个变量的值变为0xdeadbeef.这样,该程序会执行/bin/sh程序,它的suid标记使我们可以获取到位于/etc/narnia_pass目录下的narnia1用户的密码

解答

该题是缓冲区溢出的入门题…很容易看出,scanf函数接受24个字节的字符串,而buf数组则只能存放20个,那么最后4个字节就溢出了

那么,只要保证输入的最后4个字节是0xdeadbeef,该题就算完成了~

出于学习考虑,我们来看一下该程序的字节

注:为了便于查看,我把buf数组初始化为了19个B字符(最后一个为字符串结束符\0)

1
2
3
4
$ hexdump -C narnia0|less
00000870 c8 41 41 41 41 48 b8 42 42 42 42 42 42 42 42 48 |.AAAAH.BBBBBBBBH|
00000880 ba 42 42 42 42 42 42 42 42 48 89 45 d0 48 89 55 |.BBBBBBBBH.E.H.U|
00000890 d8 c7 45 e0 42 42 42 00 48 8d 3d 59 01 00 00 e8 |..E.BBB.H.=Y....|

可以看到,buf数组在var变量后边.不过,buf数组怎么不连续???嗯?

在网上搜了下,貌似现代系统为了防止很容易出现的缓冲区溢出漏洞攻击,而采取了多种防护措施,如DEP,栈保护,ASLR之类的

我尝试着关闭了,却依旧没用…咋回事儿?待以后解决吧…

补:使用gcc编译时,添加上-fno-stack-protector -Wl,-z,norelro -m32参数,使栈能够”正常溢出”

相关命令

这里记录下程序调试相关的命令,以备以后不时之需:

as hello.s -o hello.o:将代码文件汇编为链接文件
ld hello.o -o hello:将链接文件转化为可执行文件

readelf -a hello.o:查看elf文件的文件结构

hexdump -C hello.o:打印目标文件的字节

objdump -d hello.o:将机器指令反汇编

gcc main.c -g:编译代码,-g可以在用objdump反汇编时把c代码和汇编代码穿插起来显示

gcc -S main.c:只生成汇编代码main.s

参考文档

ELF如何摧毁圣诞——通过ELF动态装载机制进行漏洞利用