【C内嵌汇编】others_shellcode

Thursday, December 29, 2022
本文共424字
1分钟阅读时长

⚠️本文是作者P3troL1er原创,首发于https://peterliuzhi.top/writeup/c%E5%86%85%E5%B5%8C%E6%B1%87%E7%BC%96others_shellcode/。商业转载请联系作者获得授权,非商业转载请注明出处!

I have an everyday religion that works for me. Love yourself first, and everything else falls into line. — Lucille Ball

【Write-up】BUUCTF others_shellcode

原题链接

checksec 查看程序架构

$ checksec --file shell_asm
[*] '/home/peterl/security/workspace/shell_asm/shell_asm'
    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      PIE enabled

ida 查看程序伪代码

202209231707382022-09-23-17-07-39

然后我们看到它的getShell函数:

202209231708382022-09-23-17-08-39

我们看到它里面有一句很奇怪的__asm { int 80h; LINUX - sys_execve },这是干什么的?

我们按 tab 看一下它对应的汇编代码:

202209231710042022-09-23-17-10-04

这里我们已经看出一点端倪了,没错,这一句就是内联汇编(内联汇编使用“__asm”(C++)和“asm”(C 和 C++)关键字声明)

具体可以看以下推文:

至于int 80的作用,请参考我写的这篇 writeup的第二个 exp

构建 exp

这题根本不需要 exp,直接nc 网址 端口号即可,程序会自动执行execve("/bin/sh", 0, 0)

这题的主要功能就是介绍int 80的作用还有内联汇编