2016-04-20 49 views
1

作爲計算機設計課程中的一項任務,我的團隊必須通過溢出緩衝區並使用我們已找到的幾個小工具來使用面向返回的編程來訪問shell。使用ROP訪問ARM中的shell

使用GDB我們發現字符串「/ bin/sh的」與下面的命令的位置:

(GDB) find &system, +9999999, "/bin/sh" 

然後用幾個小工具,我們可以將其加載到R0,並從那裏,我們能夠跳進 。

不幸的是,每次我們在訪問終端之前碰到段錯誤。我們在這方面很失落,並且可以使用任何可以幫助我們的幫助。你們有沒有知道導致這種情況的常見錯誤?

我們的堆棧看起來是這樣的權利,我們走之前通過我們的小工具,進入系統:

(gdb) x/15a $sp 
0xbefffb40: 0x85a4 0x42424141 0x44444343 0x46464545 
0xbefffb50: 0xbeff0046 0xb6f55108 <inet6_opt_finish+56> 0xb6f84a60 
      0xb6f55104 <inet6_opt_finish+52> 
0xbefffb60: 0x0 0xb6ea3f6c <__libc_system> 0x0 0x84d0 <main> 
0xbefffb70: 0xb6ffc718 0xb6ffc400 0x0 

,並進入系統後:

(gdb) x/10a $sp 
0xbefffb68: 0x0 0x84d0 <main> 0xb6ffc718 0xb6ffc400 
0xbefffb78: 0x0 0x0 0x83bc <_start> 0x0 
0xbefffb88: 0x0 0x0 
+0

您想要運行什麼?文本'「/ bin/sh」'?你需要運行'execv()'系統調用或類似的東西。您需要爲您的問題添加更多信息。您是否在二進制文件上使用了ROP小工具查找器?你能展示你選擇哪一個? –

+0

我們正試圖運行存儲在r0中的參數「bin/sh /」來獲取shell的<__ libc_system>。我們使用grep手動找到了這些小工具。我們將編輯帖子以包含不相關的小工具。 – Tesnich

回答

0

不知道什麼是你的主程序看起來像,但看起來像我以前這樣。這次崩潰可能是因爲你正在跳入/返回到一個拇指子程序中,至少對於Android 5.0.1來說,__libc_system()函數是拇指。從文檔ARM Procedure call standard(第17頁第5.3節)如果您的目標是拇指,則返回的目標地址必須+1因此0xb6ea3f6c <__libc_system>應該是0xb6ea3f6d