iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

我覺得我今天寫不了一個段落


題目源自於 Bamboofox 某題題目,現存副本於 CTF-Wiki

接續昨天我們講到要覆蓋的位置在相對於 buf 偏移 112 的位置,但我們需要繞過保護機制。

由於 .rodata 是一個用於存儲 read-only data 的段。因此通常儲存不需要修改的數據,例如字串、常數等,我們可以觀察看看是否有可以利用的東西。

可以使用 IDA 或其他工具查看(R2、gdb 都可)

https://ithelp.ithome.com.tw/upload/images/20231004/20163074okCWhKdBgh.png

我們發現了有趣的字串 '/bin/sh',為什麼它有趣呢?
再了解這個之前,我們必須先了解一個叫 execve 的 system call。

execve 是一个重要的 system call,用于在 Linux 系统中載入並執行一個新的可執行檔,將目前的 process 替換為新的 process。

int execve(const char *pathname, char *const _Nullable argv[],
           char *const _Nullable envp[]);

第一個參數是要執行的可執行檔的路徑,第二個是命令列參數,第三個是環境變數,用法如下:

execve("/bin/sh",NULL,NULL)

這樣代表執行一個 shell。

而在 x86 使用者呼叫 System call 的流程如下:

  1. System call 的編號 存入 EAX。以 execve 為例,它的編號為 0x0b
  2. 將需傳入的參數存入通用暫存器,第一個參數存入 EBX,第二個是 ECX,依序下去。
  3. 執行 int 0x80 讓當前 process 觸發中斷,編號 0x80 是指 software interrupt。

而我們要操控這些 Register 的值呢? 這就需要利用 gadgets 了

至於要怎麼用有機會再寫~


終於進入正題了,好累

雞絲雜燴

https://ithelp.ithome.com.tw/upload/images/20231004/20163074iy5CtEEoqY.png

這樣也可以喔,感覺跟這個有異曲同工之妙。


上一篇
Day18 大雜燴之肉皮雜燴 - Pwn:ROP(2)
下一篇
Day20 大雜燴之放颱風假 - 量子計算:量子閘
系列文
雜七雜八大雜燴,資安技術大亂鬥30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言