路由器漏洞靶场 The Damn Vulnerable Router Firmware Project 的学习(持续更新)

看wiki 感觉看的也还行了  打算最近把 攻防世界的题 再看看 然后去肝一下buuctf上面的题目

然后 发现了一个 这个 路由器漏洞靶场  里面有源代码 还有编译好的 程序

然后 里面一共有三个

这里面也有三个

这里 从名字也能看出来利用的漏洞种类     这个项目的地址,

https://github.com/praetorian-inc/DVRF

这里面还有源代码  有空应该会更新这篇博客

stack_bof_01

如果对环境 或者 调试不太熟悉的 可以看看我 上篇写的博客

https://blog.csdn.net/qq_41071646/article/details/98343160

然后会发现有一个后门函数

那么 我们的目的就是 能够控制程序流程 然后拿到 shell

这里的利用点还是 strcpy

这里可以通过调试  来确定 我们的栈利用空间 确定返回地址的偏移,

可以使用

cp $(which qemu-mipsel-static) ./
cp $(which qemu-mipsel) ./

来 把 这两个文件复制到当前文件里面 然后就可以运行加调试,

./qemu-mipsel-static -L ./ pwnable/Intro/stack_bof_01 pipixia

后面那个pipixia  就是我们输入的参数,

然后这里有源码 (其实根据 那个工具的反编译 也能看出的七七八八了)

#include <string.h>
#include <stdio.h>

//Simple BoF by b1ack0wl for E1550

int main(int argc, char **argv[]){
char buf[200] ="\0";

if (argc < 2){
printf("Usage: stack_bof_01 <argument>\r\n-By b1ack0wl\r\n");
exit(1);
} 


printf("Welcome to the first BoF exercise!\r\n\r\n"); 
strcpy(buf, argv[1]);

printf("You entered %s \r\n", buf);
printf("Try Again\r\n");

return 0x41; // Just so you can see what register is populated for return statements
}

void dat_shell(){
printf("Congrats! I will now execute /bin/sh\r\n- b1ack0wl\r\n");
system("/bin/sh -c");

//execve("/bin/sh","-c",0);
//execve("/bin/sh", 0, 0);
exit(0);

}

然后可以用我们的gdb 来调试程序,

然后用 工具来确定我们的偏移,

把offset 文件里面的 字符当成参数传进去就可以了

然后把 ra(返回地址) 传回去 查找偏移就可以了

然后我们 写出pyload  成功的没有拿到flag。。

仔细观察一下 , 发现 其实已经到了 后门函数,,但是在后门函数发现了错误

这里我具体查了一下 mips的 指令集,

gp 是存在一个全局指针  它将指向运行决定的静态数据的一个位置 ,, 利用pg 作级指针  然后 在 取数值的时候 直接  + - 就可以了 一个指令就一把梭了

然后我们看一下后门函数

这里 gp 已经初始化了 而且 唯一不确定的值就是t9

这里查了一下资料 发现:

在mips中,跳转的方式有:

1.设置寄存器t9,跳转到寄存器t9。

2.在执行完函数func之前,把要跳转的地址address保存在ra寄存器,执行完函数func后可跳转。

位于MIPS上常用的函数调用机制中(调用约定):$t9寄存器首先会被设置为目标函数的地址,然后会使用诸如jalr $t9之类的指令进行跳转。然后全局指针$gp会使用$t9进行初始化,用于计算各种偏移地址,特别是即将被调用的其他函数的偏移地址,因此,我们一定要保证这个值的正确性

虽然看的比较模糊 但是每次调用函数初始化的时候  都会有 t9 还有 pg的 身影 那么就代表了这个函数的重要性

这里有个很好用的 rop

 __thread_start 的第二行,  在 libc.so.0 里面

这个 可以让t9  指向函数的起始地址

基址 加 偏移可以直接rop

这里 只要不关机 加载基址都不会变化 (或者 可能关机每次都一样?)

然后 我们就可以写出payload了

可以看出我们已经到了我们想要的入口点了,,,

stack_bof_02

最近再看 0day的那本书  感觉看的差不多了 然后打算把这个坑来填一下,,然后去看看漏洞战争那本书。。。

参考链接

https://www.anquanke.com/post/id/171918

https://www.anquanke.com/post/id/86747

https://blog.csdn.net/qq_41191281/article/details/85933985

https://www.jianshu.com/p/838ca0da33c3

发布了313 篇原创文章 · 获赞 44 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41071646/article/details/98585691