00:00
嗯,大家好,今天我们来看return to system call及通过控制程序执行系统调用来获取shell。嗯,在开始之前,我先介绍两条汇编指令。首先是push e BP,它会把EBP寄存器里面的值0053F8DC给压到站上,现在站是七开头的这个,然后我现在单步执行一下,大家注意观察这个变化。好,这就是push指令做的事情,那我们再看pop指令。我让他走过来,现在往泡泡EP就是把。占顶的内容给它弹到EBP上去,那现在占顶是53F8DC,然后因为P是BC嘛,那我。F81步它就会弹上来。
01:00
嗯,这是两条汇编指令。好,我们来看,继续回来看这个,那我们想要通过让程序执行系统调用来获取上,我们首先要知道什么是系统调用,系统调用是通过INT80这条指令来实现的,然后它的调用过程是,首先它会把系统你想要调用的那个函数的编号放到ex寄存器,然后把那个想要调用函数的其他的参数放到其他的一些通用寄存器,比如e be。DX计算器,那然后他就可以执行这条INT80指令,通过触发八零后中断来执行系统调用了。也就是说,如果我们想要执行这个函数来获取需要的话,我们只需要把exec VE这一个函数的系统调用号放到ex里面,然后把它的其他的参数放到其他的寄存器里面,就然后再让它执行INT80,我们就可以拿到这个shell了。嗯,我们怎么看它这个函数到底是哪个调用号呢?就是说怎么看它的调用号,我们可以在Linux里面用这条命令来查看一下。
02:17
啊,我们可以看到这个函数它的系统加用号是11,那这个11它是十进制的,如果对应到16进制,它就是B0差B啊。所以说,如果我们想要调用这个函数的话。我们需要把零叉B放到EAX计算器,把这些参数分别放到其他的那些计算器,好,也就是说这里说的这样的。那怎么让寄存器的值是我们想要放的呢?刚才演示的那两条汇编指令其中的泡泡。
03:01
就可以用到了泡泡,就是说把站点的值放到E泡泡ex的话,就是把站点的值放到ex嘛,那如果我们。构造的一构造占以后,那占顶是零叉B的话,我们泡泡EXAX就会把零叉B放到AX里面对吧?然后中间这一段先不说,我们先看一下最后构造的那个是要靠的。是这样的,我我我考出来了。啊。首先是这个填了一对A,那这个A就是之前我们学过的用。用那个脚本,或者是用那个CCLC那个东西来测它的占空间有多大,之前把它的占空间给填满吗?对吧,你是说填了一堆A是垃圾数据,没有用填填那个占空间的,然后呢,它这个地方发送的泡泡EAX是返回地址,也就是说到这里以后它会去执行泡泡exx那。
04:18
此时你执行完这一条指令以后,它的占点是它了,也就是说它会把零叉B放到ex里面。然后它返它还有个这是泡泡ex,然后return,那它return以后会返回到这这呢就可以找到是泡泡edece EB,然后再return。你说他会相继把下面的零放到。DDX。这是零,然后把这个零放到ECX。然后把B-SH放到ebx。
05:00
那这样的话,我们的参数以及我们的参数以及这个系统调用号就已经构造好了,然后他返回以后,返回到这儿执行八零中断,我们就成功的改下了,那我们现在需要的就是找找这种找这样的。函数找这样的指令,能够让它破破ex,然后再return回来,对吧,再return回来,那怎么找呢?有一个叫IP got get,好像是这样读的,这样的一个工具,大家可以去。给他上,他说了也说了怎么安装之类的。啊,这里说了怎么安装,然后通过这样的一条指令。刚刚bary,然后你的程序名字,然后刚刚only。
06:04
这个地方。在因为找的是泡泡,然后return嘛,然后。与ex有关的那样的,那回车一下。他就会给我们找到pop ex,然后return的那个地址就在这,然后我们可以记录一下。那我们还需要e bed嘛,对吧,可以继续用当ta来找一下。哦,在这儿找到了ebx。那其实如果你注意观察一下的话,会发现这里有一整串的泡泡edeceb它都有了,那我们可以直接用这一个就实就很方便了,对吧。
07:04
嗯,还有是需要找这个杠B-SH的字符串在什么地方。嗯,可以用GRE来搜一下。他给我们找到字符串是在这个位置的,然后还有调用那个T80指令。可以刚刚然后int找一下,看INT80在什么地方。那同样给我们找到180的地址。那偏移就不说了,这也是112,然后就可以构造这个EP了,你们可以看一下。那各种地址,然后会。
08:01
嗯,这样应该通过这里讲的应该可以明白了吧,是吧,就就就这种构造的方法了,我可以执行一下,还是成功了。还有之前VI上讲了一个,呃,不是讲V上他说了一个,用这样的一个函数吧,可以。不用这么麻烦,你直接往里写就是了,嗯,可以就参考一下。对。
我来说两句