天天看點

關于libc表的總結定義

定義

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版本

關于libc表的總結定義

方法二:利用ctf工具libcSearcher

https://github.com/lieanu/LibcSearcher

關于libc表的總結定義