Patchelf & Glibc-all-in-one Combo

kazma 成大資安社 創辦人/社長

Patchelf & Glibc-all-in-one Combo

這篇主要會提到平常在模擬 Pwn 遠端環境的好用組合技。

0x1 Introduction

今天會用 pwnable.tw dubblesort 示範。
patchelfglibc-all-in-one 安裝方式如下:

patchelf

1
└─$ sudo apt install patchelf

glibc-all-in-one

1
└─$ git clone https://github.com/matrix1001/glibc-all-in-one.git 

0x2 Demo

  • 首先我們要知道題目附給我們的 libc 是什麼版本的:
    1
    2
    3
    4
    └─$ strings libc_32.so.6 | grep GNU
    GNU C Library (Ubuntu GLIBC 2.23-0ubuntu5) stable release version 2.23, by Roland McGrath et al.
    Compiled by GNU CC version 5.4.0 20160609.
    GNU Libidn by Simon Josefsson
    從上面可以得知版本是:2.23-0ubuntu5
  • 接著我們要用 glibc-all-in-one 去找到對應版本需要的文件:
    1
    2
    3
    └─$ cd glibc-all-in-one/
    └─$ ./update_list
    └─$ cat list
    看了一下會發現 list 沒有我們要的版本,可以在 https://launchpad.net/ubuntu/+source/glibc 找,或是直接打對應版本的網址 https://launchpad.net/ubuntu/+source/glibc/2.23-0ubuntu5
    右側的 Builds 裡面找到裡面找到題目使用的 CPU 架構。
    1
    2
    └─$ file dubblesort
    dubblesort: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter ./ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=12a217baf7cbdf2bb5c344ff14adcf7703672fb1, stripped
    這題為 Intel 80386
    1
    2
    3
    4
    5
    6
    └─$ cd ~/glibc-all-in-one/debs
    └─$ wget http://launchpadlibrarian.net/293727477/libc6_2.23-0ubuntu5_i386.deb
    └─$ mkdir ~/glibc-all-in-one/libs/2.23-0ubuntu5_i386
    └─$ cd ~/glibc-all-in-one/
    └─$ ./extract debs/libc6_2.23-0ubuntu5_i386.deb libs/2.23-0ubuntu5_i386
    └─$ cd ~/glibc-all-in-one/libs/2.23-0ubuntu5_i386
    那如果 list 有你想要的版本可以直接如下操作:
    1
    └─$ ./download 2.23-0ubuntu11.3_amd64
    一樣會在 ~/glibc-all-in-one/libs 下看到對應的資料夾。
  • ldd:
    全名是:List Dynamic Dependencies。可以查看一個程式在運行時需要鏈接的所有共享函式庫。用法如下:
    1
    2
    3
    4
    └─$ ldd dubblesort
    linux-gate.so.1 (0xf7f9e000)
    libc.so.6 => /lib32/libc.so.6 (0xf7c00000)
    /lib/ld-linux.so.2 (0xf7fa0000)
    可以看到目前都是用到本地 /lib32 還有 /lib 下的檔案 ,我們可以在 patchelf 後來觀察一下變化。
  • patchelf
    1
    2
    3
    4
    5
    6
    7
    └─$ cp /home/kazma/glibc-all-in-one/libs/2.23-0ubuntu5_i386/ld-2.23.so  ./
    └─$ patchelf --set-interpreter ./ld-2.23.so dubblesort
    └─$ patchelf --replace-needed libc.so.6 ./libc_32.so.6 dubblesort
    └─$ ldd dubblesort
    linux-gate.so.1 (0xf7fba000)
    ./libc_32.so.6 (0xf7df7000)
    ./ld-2.23.so => /lib/ld-linux.so.2 (0xf7fbc000)
  • 成功執行:
    1
    2
    └─$ ./dubblesort
    What your name :
    以上是模擬遠端環境的一個簡單示範,之後有遇到其他特殊狀況會持續更新在這邊,有問題也歡迎找我討論 ~
  • Title: Patchelf & Glibc-all-in-one Combo
  • Author: kazma
  • Created at : 2024-04-19 09:05:57
  • Updated at : 2024-04-25 21:15:05
  • Link: https://kazma.tw/2024/04/19/Patchelf-Glibc-all-in-one-Combo/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments