栈溢出利用-----jmp esp
生活随笔
收集整理的這篇文章主要介紹了
栈溢出利用-----jmp esp
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
通過jmp esp利用棧溢出,首先我們要找出jmp esp 的地址,因為系統(tǒng)不同,通用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
給出程序:
反匯編調(diào)試:
執(zhí)行完strcpy,發(fā)現(xiàn)數(shù)據(jù)溢出了,有的數(shù)據(jù)被覆蓋了
執(zhí)行到ret,esp地址存放的內(nèi)容是0x772e55f7,jmp esp的通用地址
執(zhí)行jmp esp ,執(zhí)行完eip的值和esp一樣,為0x0019fedc
我們就會跳到0x0019fedc繼續(xù)執(zhí)行
從上圖可以看出程序執(zhí)行的代碼就是從0x0019fedc開始,把數(shù)據(jù)當(dāng)作機器碼,機器碼所對應(yīng)的匯編就是程序要執(zhí)行代碼。而這些數(shù)據(jù)就是shellcode的內(nèi)容,所以利用jmp esp跳轉(zhuǎn),讓機子干什么就把對應(yīng)的機器碼放在shellcode里,但注意,不能有如果有00數(shù)據(jù),一定要放在最后
總結(jié)
以上是生活随笔為你收集整理的栈溢出利用-----jmp esp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《从过旧宫诗》是哪个时期的作品?
- 下一篇: 颐和园怎么买联票