有人请帮我解释下面的shell代码(在评论部分),并向我解释最后一行代码的作用吗?
我首先想到第3行和第4行正在设置/ bin / sh,但是第二个想法可能是sh / bin / X对于某些X我无法理解。事实上// sh部分看起来几乎像一个评论?
我的预感是系统调用第11行是exec系统调用,前面的行是为exec调用设置args。
我猜你想要小心运行这段代码;)
您可能想要研究Hex-Rays反汇编程序,它可以(将某种程度上)将机器代码/汇编程序(两者等效)转换为C语言。
您已经有内联代码的反汇编,它在评论中。所以那部分有点令人困惑。
最后的声明投了 buf 进入函数指针,并调用代码。这是漏洞利用的实际用途。它也是(据我所知)未定义的行为,并且不能在防止执行随机内存区域的环境中工作。
buf
程序集的作用是构建一个参数列表以传递给操作系统调用以执行二进制文件( /bin/sh )。
/bin/sh
这两条线推 /bin/sh 到堆栈上。
pushl $0x68732f2f pushl $0x6e69622f
这些行将指针放在 /bin/sh 在一个参数寄存器中根据 召集会议 。
movl %esp, %ebx pushl %eax pushl %ebx movl %esp, %ecx cdq
该行将系统调用号11放在寄存器中作为中断的参数。
movb $0x0b, %al
最后一行调用操作系统。
int $0x80
C代码中的这一行只是将缓冲区转换为函数指针,并调用该函数。
(( void (*)( )) buf )( );
注意,这曾经是利用软件的常用方法,但是可以使用类似的方法 JIT 编译代码。