栈溢出利用-----jmp esp
生活随笔
收集整理的這篇文章主要介紹了
栈溢出利用-----jmp esp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過jmp esp利用棧溢出,首先我們要找出jmp esp 的地址,因為系統不同,通用jmp esp的地址可能不同,下面的代碼是找出jmp esp的地址的:
#include<windows.h> #include<iostream.h>#include<tchar.h> int main() { int nRetCode=0; bool we_load_it=false; HINSTANCE h; TCHAR dllname[]=_T("ntdll"); h=GetModuleHandle(dllname); if(h==NULL){h=LoadLibrary(dllname); if(h==NULL){cout<<"ERROR LOADING DLL:"<<dllname<<endl; return 1; } we_load_it=true; } BYTE* ptr=(BYTE*)h; bool done=false; for(int y=0;!done;y++) {try { if(ptr[y]==0xFF&&ptr[y+1]==0xE4) {int pos=(int)ptr+y; cout<<"OPCODE found at 0x"<<hex<<pos<<endl;}} catch(...) { cout<<"END OF"<<dllname<<"MEMORY REACHED"<<endl; done=true; } } if(we_load_it) FreeLibrary(h); return nRetCode;}
我用的是0x772e55f7
給出程序:
反匯編調試:
執行完strcpy,發現數據溢出了,有的數據被覆蓋了
執行到ret,esp地址存放的內容是0x772e55f7,jmp esp的通用地址
執行jmp esp ,執行完eip的值和esp一樣,為0x0019fedc
我們就會跳到0x0019fedc繼續執行
從上圖可以看出程序執行的代碼就是從0x0019fedc開始,把數據當作機器碼,機器碼所對應的匯編就是程序要執行代碼。而這些數據就是shellcode的內容,所以利用jmp esp跳轉,讓機子干什么就把對應的機器碼放在shellcode里,但注意,不能有如果有00數據,一定要放在最后
總結
以上是生活随笔為你收集整理的栈溢出利用-----jmp esp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《从过旧宫诗》是哪个时期的作品?
- 下一篇: 线性表----链式表