假設我們有一個函數緩衝區溢出漏洞,覆蓋功能參數,包括返回地址
foo(char *name,int id)
{
printf ("%s%d",name,id);
}
利用緩衝區溢出,我們在更換棧以foo函數的地址上的返回地址。我能夠做到這一點。
我該如何溢出函數參數呢?富有兩個參數,有人可以幫助我瞭解如何使用緩衝區溢出溢出這些參數。
假設我們有一個函數緩衝區溢出漏洞,覆蓋功能參數,包括返回地址
foo(char *name,int id)
{
printf ("%s%d",name,id);
}
利用緩衝區溢出,我們在更換棧以foo函數的地址上的返回地址。我能夠做到這一點。
我該如何溢出函數參數呢?富有兩個參數,有人可以幫助我瞭解如何使用緩衝區溢出溢出這些參數。
理論上,當函數被調用但是成功覆蓋取決於堆棧的佈局時,參數被壓入堆棧。同樣,從你的目標來看,你必須以某種方式做到這一點,以免破壞它們之間的數據。
上面的代碼也有另外一個漏洞,想想吧。
是的,它有格式字符串漏洞。我想學習覆蓋堆棧的佈局。| 我試過下面輸入,但我面對分段錯誤... +「EBP」 +「返回地址」 +「ARG1」 +「Arg2所得」,「字符串緩衝Lenght」 – 2013-03-25 10:53:14
爲什麼要覆蓋參數?通常情況下,您只需覆蓋返回地址並解決一些會導致跳轉到shellcode的指令。 – Gumbo 2013-03-13 17:54:28
是的你的權利,但我的目的不是跳轉到shell代碼。而是看看是否可以覆蓋堆棧中的函數參數。 – 2013-03-14 05:31:25
更清楚,當函數被調用 - 我可以給我自己的自定義參數,該功能? – 2013-03-14 07:06:27