iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

今天來練習 ROP 的題目吧 但看起來似乎沒練習到呢


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

為了方便練習就先看看 C code

#include <stdio.h>
#include <stdlib.h>

char *shell = "/bin/sh";

int main(void)
{
    setvbuf(stdout, 0LL, 2, 0LL);
    setvbuf(stdin, 0LL, 1, 0LL);
    
    char buf[100];

    printf("This time, no system() and NO SHELLCODE!!!\n");
    printf("What do you plan to do?\n");
    gets(buf);

    return 0;
}

我們可以看到他使用了 gets 這個危險函數。

https://ithelp.ithome.com.tw/upload/images/20231003/20163074n787oKPq5n.png

使用 checksec 可以看到開啟 NX(Non-Executable),意思是強制"可寫段不可執行,可執行段不可寫"的原則,代表我們無法直接寫 shellcode 然後執行,以及不能竄改可執行的區段。

https://ithelp.ithome.com.tw/upload/images/20231003/201630745COzXMkIca.png

從 main 可以看出 buf 的位置是 esp+0x1c,設置斷點後發現

https://ithelp.ithome.com.tw/upload/images/20231003/20163074H3AMIFtLOR.png

EBP 是 0xffffd158,ESP 是 0xffffd0d0
所以 buf 的地址在 0xffffd0d0 + 0x1c = 0xffffd0ec,相對於 EBP 為 0xffffd158 - 0xffffd0ec = 0x6c(108),再加上儲存 EBP 的 4 bytes 可以得知我們要覆蓋的位置在相對於 buf 偏移 112 的位置。

然而由於這隻程式中有開啟 NX,所以我們不能隨意寫入 shellcode 執行,因此我們要透過 gadgets,至於怎麼利用就有空再寫吧~


肉皮雜燴

https://ithelp.ithome.com.tw/upload/images/20231003/20163074MyWiOe6cK9.jpg
Source:在圖片上

真的是甚麼奇怪的雜燴都有ㄟ


上一篇
Day17 大雜燴之分子料理 - 量子計算:簡介
下一篇
Day19 大雜燴之雞絲雜燴 - Pwn:ROP(3)
系列文
雜七雜八大雜燴,資安技術大亂鬥30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言