對於軟件安全中的類,我必須簡單地返回libc攻擊。我設法制作了一個perl腳本,在給出正確的指向system(),exit()和/ bin/sh字符串的指針後完成攻擊。我發現這些指針使用gdb「p系統」等。現在我想通過編寫一個c程序,使其在運行時找到system()和exit()的地址,從而使漏洞更加「動態」。我該怎麼做呢?我試過「&系統」,但這似乎並沒有給我正確的地址。編號: 系統沒有啓用ASLR。返回libc查找指針
回答
你可以很容易發現利用binutils
地址 - objdump
或readelf
,但只有二進制實際使用符號的地址。未使用的符號未與libc庫鏈接。
說你想破解的ls
命令:
objdump -d `which ls` | less
你會發現這節:
0000000000402910 <[email protected]>:
402910: ff 25 da 89 21 00 jmpq *0x2189da(%rip) # 61b2f0 <_fini+0x208704>
402916: 68 5e 00 00 00 pushq $0x5e
40291b: e9 00 fa ff ff jmpq 402320 <_init+0x10>
所以,現在你有地址:0x402910
是exit()
功能的跳轉地址(如果您嘗試使用printf("%x\n", exit);
即可獲得印刷品
關於system
,ls
未使用此符號,因此您無法以此方式訪問它,因爲它未鏈接。
我認爲&system
將在編譯時解析。你有沒有試過dlopen()
和dlsym()
?只是建議,我不知道他們是否會工作。
編輯他們的
沒有將目標進程上下文之外的工作,如果某種Address space layout randomization到位。
默認情況下,在某些流行的Linux發行版中啓用ASCII Armoring。它通常將重要庫的地址映射到包含NULL字節的內存範圍。你可以閱讀更多關於如何繞過ASCII鎧裝here.
一篇有趣的文章。感謝分享。 +1 –
如果我沒有弄錯,你試圖用C編寫一個程序來執行和利用易受攻擊的用戶空間程序?在這種情況下,如果你使用execve()編寫的程序使用execve(),那麼這將啓動具有它自己的進程空間的易受攻擊的進程。這將包括重新加載的libc。想想看這樣的:
pwner
`-[libc]
`-./vuln
`-[libc]
在這種情況下,您的動態程序,「pwner」將需要使用類似的ptrace()系統調用跟蹤漏洞程序,並獲得libc的指針。這是GDB在調試二進制文件時的有效工具。您的程序應該使用ELF規範來查找E_ENTRY的地址。從這裏使用ptrace()。首先使用PTRACE_TRACEME,然後使用PTRACE_PEEKTEXT。
- 1. 返回到libc - 非法指令
- 2. 查找指針
- 3. 返回指針C
- 4. 返回指針Ç
- 5. 返回alloca指針
- 6. C++返回指針
- 7. 返回類指針
- 8. 指針與返回
- 9. 返回指針數組的指針
- 10. 返回指針數組(CvSeq指針)
- 11. 返回指針數組的指針
- 12. 解析 - JavaScript指針查詢,從指針返回解析對象
- 13. 有關libc指針加密的問題
- 14. C++:返回子類指針
- 15. ListCellRenderer返回空指針
- 16. wxBufferedPaintDC GetGraphicsContext返回NULL指針
- 17. 返回指針陣列
- 18. dynamic_cast返回空指針
- 19. Golang:返回指針和derefrencing
- 20. 在java中返回指針
- 21. 僞流指針返回
- 22. 函數返回指針C
- 23. Redux state.subscribe返回指針
- 24. 指針錯誤返回值
- 25. 返回一個指針
- 26. 函數指針返回
- 27. MediaStore.Images.Media.INTERNAL_CONTENT_URI返回空指針
- 28. 從函數返回指針
- 29. 返回指針數組?
- 30. 返回C++指針到perl
如果它不是庫入口點,那麼它必須在某處定義。 C標準要求它被定義爲一個函數,所以它必須存在某個地方。嘗試找到它。 – randomusername
@randomusername我更新了我的答案 - 現在我確切知道如何找到函數的地址。但是,**您要調用的符號/函數必須已被您要破解的二進制文件使用。**否則,它不會被鏈接。 – TMS
@randomusername一個進程也將結束,如果main返回...沒有特殊的功能...你剛用完程序。如果一個符號沒有被使用,它不需要在任何地方的目標文件中。如果它沒有被編譯,你將不得不在運行時動態鏈接......這是有限的實用工具,因爲該程序沒有使用它,並且你已經在那個時候執行了任意代碼。 –