定義
libc是Linux下的ANSI C的函數庫。
ANSI C是基本的C語言函數庫,包含了C語言最基本的庫函數。這個庫可以根據 頭檔案劃分為 15 個部分,其中包括:字元類型 ()、錯誤碼()、 浮點常數 ()、數學常數 ()、标準定義 ()、 标準 I/O ()、工具函數 ()、字元串操作 ()、 時間和日期 ()、可變參數表 ()、信号 ()、 非局部跳轉 ()、本地資訊 ()、程式斷言 () 等等。這在其他的C語言的IDE中都是有的。
關于pwn題如何加載目标libc的方法
(經常會遇到題目提供libc,但是本地調試的時候加載的是本地libc)
方法一:
添加環境變量的方法:
export LD_LIBRARY_PATH=‘pwd’(目前目錄為加載目錄)
export LD_PRELOAD=本地libc(加載本地pwn題目下的libc)
在退出前:unset LD_PRELOAD(調試完記得删除環境變量)
注意:(在64位的ubuntu下調試32位程式會導緻libc無法加載)
方法二:
p=process([’./bin’],env={“LD_PRELOAD”:"./libc-2.23.so"}([’./bin’]為需要調試的二進制檔案名,libc-2.23.so為需要加載的目标libc)
關于擷取libc的其他方法
在無libc庫函數的情況下,利用DynELF工具來洩漏system函數的位址,然後再往一個地方寫’/bin/sh’字元串并構造調用system函數的棧。
雖然DynELF是一個dump利器,但是有時候我們也會碰到一些令人尴尬的意外情況,比如寫不出來leak函數,下libc被牆等等。方法1: https://libc.blukat.me,這是一個線上查詢libc版本的網站。通過給出libc_start_main和read的位址後三位可以查到libc版本
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB9ENFpnT1EEVOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1ETOyUDNxETM3ADMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
方法二:利用ctf工具libcSearcher
https://github.com/lieanu/LibcSearcher