关机指令代码_利用代码的Stack overflow进行"黑客"操作

怎么用代码的Stack overflow黑进别人系统-初级篇

1 前言

学了这么多年的编程语言,什么python, C, C++, JAVA, PHP,MATLAB都有接触除了if, else用的比较溜,其余的没发现有什么见长。代码只有数量没有质量,一段好的代码应该是安全的,高效的,今天我就结合做过的项目聊聊怎么利用Stack overflow在Linux C语言的环境下进行代码渗透。

2 基础工具

  • OS: Linux Ubuntu, 更推荐Linux Debian
  • Compiler: GCC 4~5
  • Debugger: GDB
  • IDE: Eclipse, Vim, etc都可以
  • Optional: VM ware 或Virtualbox 虚拟机,如果在Windows上运行

3 代码示例,Exploit讲解

上代码,代码的内容基本可以跳过,后面解释,其实就是一个排序。

7bb971ad863fa129bdd2c146c2b0eb3d.png

这段代码意思就是对你输入的一串数字或者字符文本进行处理,输入的长度自己决定,当然用户也可以手动输入内容,这都是属于一类问题。这种代码可以说在日常的码农工作里非常常见了,接下来我将举例说明利用这段代码的任意输入的漏洞进行渗透,在在这之间我会做一些准备工作。

首先说一下堆栈,其实就是stack, heap由于是随机分配的chunk,就不说了。当代码从主函数前往子函数之前,主函数会有一系列保护现场的措施,这个我们也可以跳过,我主要说的是可以接收用户输入的部分,在这个例子中就是我们的子函数,子函数里的常量去数据区,变量去栈区,是按照先进后出的原则进行的,细节就是在这里,在进栈的时候,栈寄存器会自己做一些处理,就是今天的重点内容,ESP, EBP, EIP。通过巧妙的控制用户输入,使EBP, ESP沾满padding1的位置,然后使EIP,就是函数的返回地址,返回到任意一个我们想返回的地址,当然就不是主函数的保护现场的地址了,为了做点有趣的事情,我们准备进入system call的地址,请求计算机做点系统级的事情,比如关机啊,发出声音啊,运行一些系统级的指令什么的都行。这里我们以进入Linux shell terminal为例。

e34e61bd1fa834e33a6aca0c375ba8fe.png

接下来我们要做的事情就是计算padding,看看用户输入多少才能override到EIP,就是函数的返回地址,然后如果我们找到了之后,里面的地址放什么,这里我们放的是system call的地址,然后system call请求了,请求之后的动作的返回值在padding里面,这里我们用的是/bin/bash 所以可以不用管这个值了,最好不要为空就行。接下来就是找一下Linux terminal的地址了,以上说的所有地址都可以在GDB中找到在GCC编译之后的可执行文件里。

直接上图和GDB调试过程,打个断点,多步运行,查看堆栈寄存器的地址,因为我们马上要在这些地址里面重写我们自己想要的值。

d8b6c0b6fb93cb428873b19b54933671.png

查找Linux bash terminal 发地址

71e5c69828397d1719be5604568ff151.png

代码的编译和执行:

be6410be80291280e314f692714154c1.png

你可以看到,我们从程序里面进入到了系统的bash terminal了,渗透成功!

4 Reference

[1] “Return2libc”, June, 2020. Accessed on: June. 20, 2020. [Online]. Available: https://blog.csdn.net/qq_37414405/article/details/84928128

[2] “return to lib_c buffer overflow exercise issue”, Oct. 2019. Accessed on: May. 30, 2020. [Online]. Available: https://stackoverflow.com/questions/19124095/return-to-lib-c-buffer-overflow-exercise-issue

[3] S. El-Sherei, Return-to-libc, May. 2026. Accessed on: May. 24, 2020. [Online]. Available: https://www.exploit-db.com/docs/english/28553-linux-classic-return-to-libc-&-return-to-libc-chaining-tutorial.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值