iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
Security

CTF30系列 第 17

CTF 11: Shop (Pwn, PlaidCTF 2018)

  • 分享至 

  • xImage
  •  

簡介

這題的說明如下。

Ready to go shopping?

Server running at shop.chal.pwning.xxx:9916

如果打開程式,會發現介面長這樣:

有四個指令可以用。

  • a 新增物品
  • l 列出物品
  • n 改名
  • c 結賬

偵查階段

拿到程式,當然就是 gdb ./program
但一進去發現:

這程式沒有 main? 好像有點奇怪阿...
經過 c - How to disassemble the main function of a stripped application? - Stack Overflow 指點,我們可以試試看下:

根據文章,這應該是因為編譯時把 Symbol 拔掉了。

[es@es-l tmp]$ file program
program: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=050db5e64b7e6b7222e3d458e52acbf1e0509320, stripped

所以這程式應該是編譯後,用 strip 把 symbol 弄掉。

但我們可以看 .text 的部分。其實 info functions 的時候就說了這程式進入點在某位置,故我們去看該位置所屬的 .text 看看。

__libc_start_main 呼叫時,第一個參數是 main() 的位置。所以最後一個被 movrdi 的東西,就會是第一個參數 (在 stack 之上)。

接下來會遇到其他問題。

(gdb) break *0x400db1
Breakpoint 1 at 0x400db1
(gdb) r
Starting program: /tmp/program
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.27-32.fc28.x86_64

這時候又不能下 disassemble *0x400db1,因為這不是正常的函數名稱...

(gdb) disassemble *0x400db1
No function contains specified address.

如果亂猜大小,回來的內容也不盡正確。也不能用 n s 單步執行。

(gdb) n
Cannot find bounds of current function
(gdb) s
Cannot find bounds of current function
(gdb)
(gdb) disassemble *0x400db1,*0x400db2
Dump of assembler code from 0xffffffffe5894855 to 0x48e58948:
End of assembler dump.

這邊似乎有點麻煩。在考慮要不要用 gdb 以外的工具來拆。


上一篇
CTF 10: 3NTERPRISE s0lution (Web, Teaser Dragon CTF 2018)
下一篇
CTF ?: How to Recon (Web)
系列文
CTF3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言