簡體   English   中英

如果堆棧'翻轉'你還可以使用緩沖區溢出來執行shell代碼嗎?

[英]If the stack is 'flipped' can you still execute shell code using a buffer overflow?

在這種情況下,堆棧從地址00000000開始並向下擴展。 數組訪問(char [6]在00002301和char [7]在00002302)。

ebp-> 00001904 .... esp-> 00002100(堆棧頂部在這里)

如果使用錯誤的輸入,你仍然可以執行緩沖區溢出,我的問題是:
- 你可以使用溢出的漏洞來執行一些shell代碼(來自輸入)。

在常規堆棧中,您可以覆蓋ebp以指向您的shell代碼,您是否仍然可以執行此操作,即堆棧被“翻轉”。

簡短回答:是的。

  1. 函數A在堆棧上為變量Q分配緩沖區。
  2. A調用B傳遞Q的地址作為參數。
  3. B溢出緩沖區,將返回地址返回到A.

您還必須注意緩沖區下溢或其他可能修改任意內存的攻擊(例如從雙鏈表中釋放元素)。

你可以在O'Hallaron的書CSAPP中找到完美解決的這個問題。

這是簡要介紹:

  • 首先,您了解我們可以通過使用緩沖區溢出來覆蓋ebp。 這可以工作,因為call和ret指令將使用地址將返回點放入並將其拉回。
  • 然后,Linux有一種稱為堆棧隨機化的保護機制。 這意味着您無法找到ebp的確切地址。 但我們可以使用指令名稱nop ,這稱為slop(也許我猜)。
  • 最后,Linux有最后一道保護牆:設置金絲雀。 這是在調用函數之前設置的(ebp + 4)地址中的值。 返回后,您可以檢查這一個以查找堆棧是否已被溢出攻擊。

如果你想試試這個,你可以查看ICS的Lab3,你可以很好地運用這個技術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM