日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C和混编混合编程----strcpy缓存溢出原理

發布時間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C和混编混合编程----strcpy缓存溢出原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天老師給了一到程序,讓我們分析分析原理,關于strcpy緩存溢出原理的,反匯編一遍遍調試,終于看明白了,記錄一下
C程序:

#include "string.h" #include "stdio.h" char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00"; void fun1(int a, int b) {printf("fun1 run!para a=%d,b=%d\n",a,b); } void fun2(int a) {printf("fun2 run! para a=%d\n",a); } void fun3(int a,int b,int c) {printf("fun3 run! para a=%d,b=%d,c=%d\n",a,b,c); } int main(int argc, char* argv[]) {printf("begin\n");char a[4]={0};strcpy(a,shellcode);fun1(2,3);fun2(4);fun3(4,5,6);return 0; }

運行結果:

可以看出,按照正常的C的話,fun2函數應該只會執行一次,但執行了兩次,事出反常必有妖,讓我們來分析一下,反匯編:

當程序執行strcpy前,a的值是0x0019ff2c,這個是地址,存放的是0000000,在這里我們要特別注意0019ff30和0019ff34地址里面的值,后面執行fun2會用到

執行完strcpy后,a內容是地址為0x0019ff2c存放的值,我們可以看到0019ff30和0019ff34地址存放的內容發生了改變,這個時候我們再看C程序中shellcode數組的值:

char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00";

發現0x0019ff2c到0019ff34存放的數據就是這些值,而且0019ff30和0019ff34存放的數據被這些覆蓋了。a數組大小為4,shellcode是12,a的數組存放不了shellcode的值,而strcpy函數不會檢查要復制的內容的大小,只管把要復制的內容復制過來,內存不夠,覆蓋內存中其他數據。

當執行完fun3是,按說應該程序結束,來讓我們看看,為什么fun2還會執行

當執行到pop ebp是,當前esp的值為0019ff30,內容為68697071,執行完后ebp的值就是68697071,ebp的值原本不是這個,因為使用strcpy把原本的內容覆蓋了


當執行到ret時,這個時候我們就要注意了,因為執行完這條語句就會去執行fun2函數,ret指令相當于執行:

pop eip

這個時候esp的值為0019ff34,內容為00401005,執行ret后eip=00401005

我們來看看fun2函數地址,是00401005,這就是為什么執行完fun3回去執行fun2

總結:

  • strcpy 函數不對數組邊界進行檢查,只管把要復制的內容復制過來,內存不夠,覆蓋內存中其他數據,很容易造成緩沖區溢出的漏洞
  • shellcode數組里的值一共12位,最后ret語句會把最后4位賦值給eip,我們可以利用這個跳轉到我們想要執行的代碼處
  • 向緩沖區內填充數據,如果數據的長度很長,超過了緩沖區本身的容量,那么數據就會溢出存儲空間,而這些溢出的數據還會覆蓋在合法的數據上,這就是緩沖區和緩沖區溢出的道理。
  • 參考

    https://blog.csdn.net/yahohi/article/details/7724669
    https://blog.csdn.net/xiaoyuai1234/article/details/52121588

    總結

    以上是生活随笔為你收集整理的C和混编混合编程----strcpy缓存溢出原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。