others_shellcode wp (python3)(含getshell过程详解)

文章详细分析了一个32位环境下的程序,通过ida反汇编工具发现其使用int80系统调用来触发execve函数获取shell。在没有溢出点的情况下,程序通过设置eax、ebx、ecx和edx寄存器值,直接调用系统调用实现getshell。在本地运行验证了该程序确实能执行ls命令,表明已获得shell权限。
摘要由CSDN通过智能技术生成

事前准备

nx pie 32 小端序

看看ida

字符串里面没东西

就调用了一个函数,名字有点奇怪,点进去看看

int 80、11、eax、还有binsh字符串.....这些东西是触发execve的getshell所需要的一些元素 简单来说,在此种方法的32b环境下需要eax=11 ebx=sh字符串,ecx=0(或者指向sh字符串),edx=0(详细内容自行学习ret2syscall),ida又说eax就是result.......

漏洞及其利用思路

推测就是exceve方法的getshell,看伪c还缺点东西(ecx和edx的0)但是这个程序没有溢出点(main就调用了这一个getshell函数,而这个被调用的函数又没有什么溢出点给你用,除了系统调用没东西了),我怀疑他是直接把shell给你了....但是这个猜想确实离谱,可也没其他可能了,我就去本地运行了一下这个程序。

好吧确实是这样(ls的东西是我这个程序文件夹的名字,重点在于,可以运行ls了,说明已经有shell了)既然伪c没东西了,那说明汇编应该会告诉我们什么

下面我把int80前重要的语句全部讲一下:

ret2syscall简介

但在讲这个之前,简要讲一下syscall的内容吧,int 80是系统级调用的一个,触发此中断后可以执行一些函数,通过eax指向的编号调用。其中execve的编号就是11.像system很经典的system(‘‘/bin/sh’’)execve对应的就是execve("/bin/sh",0,0)(或第二个参数同样是sh字符串)

一般如果是手动触发syscall,通过往栈中写入数据后pop部署好寄存器后执行syscall

了解了这些之后,我们再来看看上面的代码段

这几个蓝色句子下面对应的就是它的汇编段

函数调用后进行最基本的ebp esp指向在此之前并没有发生栈调用,所以ebp与esp重合(这里以及后面的寄存器情况截图是gdb调试里的,就b下断点然后 n下一句遇到函数调用s一下,逐步观察就行了,一些很基本的操作,我不多做赘述)

异或使edx指向0(xor不同为1,结果存edx中)

将edx(0)压入栈中

因为是小端序以及栈数据结构的特点,逆序压入字符串(实际上压入的对应的ascii码,我为了便于观看在ida中对字符串按了r使其变为字符串形式显示)

esp此时指向的栈顶正是sh的字符串,所以这里通过mov的方式使ebx指向了sh字符串,再使0入栈

将ebx中存的sh字符串入栈,然后将其放入ecx

放入了一个数,然后用前后数相减的方式使eax指向了11

至此寄存器已经部署完毕,触发80中断getshell

以上便是此函数是如何getshell的过程解释

(这题直接给shell我就懒得写exp了,直接手动nc)

getshell:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值