2012-06-27 164 views
1

假設我正在嘗試開發某種軟件的漏洞,它可以用兩種不同的行爲進行響應:一種是由於不正確的變量分配或兩次崩潰導致進程崩潰,我獲得了對EIP的控制並返回一個無效的地址。這兩種不同行爲的原因是由於ASLR,並且因爲我只有部分信息泄露,所以我不得不做一些暴力強制。我希望該計劃僅在EIP修改時中斷。但是,由於流程不斷崩潰和重新生成,我無法告訴程序僅在修改EIP時才停止;無論如何,該進程將始終在GDB中崩潰。我如何克服這個困難? (想到在IT安全中發佈這個,但是認爲它會更好,因爲這與GDB有關)GDB調試特定崩潰

+0

你可以試試看security.se,但我會清理一下這個問題。這些人不喜歡黑帽子。 – rook

回答

0

你應該在發生內存損壞之前set a breakpoint。在崩潰的那一刻,gdb會中斷,你可以使用show stack這個命令來告訴你它想要的是調用堆棧,但是如果你已經損壞了EIP,那麼你已經部分損壞了該函數的堆棧幀,並且show stack將會部分損壞(取決於您砸碎了多少堆!)。然而,這個過程可以幫助縮小發生內存損壞的位置,並且始終可以在調用堆棧中設置更高的斷點並逐步執行該程序。

GDB也有reverse debugging,這可能是一種更簡單的方法,因爲您可以在崩潰後退後一步。但是,這個功能是相當新的。通常黑客必須使用上述技術。