1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          簡單緩沖區溢出原理

          來源:互聯網轉載 時間:2024-01-29 08:16:06

          本篇原創作者:Rj45

          背景

          什么是緩沖區溢出?這里我借某臺棧溢出靶機里面的第一道題目來解釋緩沖區溢出的原理。

          可以看到靶機里面有兩份權限不同的文件,而我目前拿到的shell是 level0

          審計levelOne.c

          #include <stdio.h>#include <string.h>#include <unistd.h>int main(int argc, char **argv) {    uid_t uid = geteuid();    setresuid(uid, uid, uid);    long key = 0x12345678;    char buf[32];    strcpy(buf, argv[1]);    printf("Buf is: %sn", buf);    printf("Key is: 0x%08xn", key);    if(key == 0x42424242) {        execve("/bin/sh", 0, 0);    }    else {        printf("%sn", "Sorry try again...");    }    return 0;}

          1、審計:可以看到,程序一開始聲明并初始化了key=0x12345678, 并聲明了32字節的buf, 然后通過strcpy函數將第一個參數拷貝到buf中, 接著判斷key是否為0x42424242,如是則獲得shell。(levelOne的權限為level1) key已經初始化為0x12345678,如何才能將其修改為0x42424242?

          2、溢出:如何將key修改為0x42424242?--通過緩沖區溢出覆蓋key值為0x42424242。什么是緩沖區溢出?在樣例程序中聲明了一段32字節的buf,此為緩沖區, 當通過strcpy函數將輸入的函數第一個參數拷貝到緩沖區的時候,由于strcpy函數為危險函數,其不會對操作對象進行任何檢查,故在輸入數據不超過32個字節時不會發生任何情況, 但當輸入的數據超過32個字節的時候,就會發生溢出,也即所謂的緩沖區溢出。

          3、覆蓋:根據前面我們學習到的內容,一個程序在載入內存后,其棧區會存在函數的各種變量、參數、棧針、返回地址等,并且各種數據是相鄰分布的。這就意味著,一個存在緩沖區溢出的程序,在精準控制溢出范圍的情況下,可以精準覆蓋內存棧區中某些特殊位置的數據。這就為利用構造了條件,也即在本樣例程序中的覆蓋key值為0x42424242。

          4、危險函數:顯而易見,在緩沖區溢出的過程中,最關鍵的就是strcpy函數。那么還有哪些類似strcpy的危險函數呢?

          可以看到這些危險函數集中為IO函數。

          反匯編levelOne

          1、命令

          objdump -d levelOne -M intel

          2、反匯編 下面為樣例程序的反匯編情況:

          000011e9 <main>:    11e9:    8d 4c 24 04             lea    ecx,[esp+0x4]    11ed:    83 e4 f0                and    esp,0xfffffff0    11f0:    ff 71 fc                push   DWORD PTR [ecx-0x4]    11f3:    55                      push   ebp    11f4:    89 e5                   mov    ebp,esp    11f6:    56                      push   esi    11f7:    53                      push   ebx    11f8:    51                      push   ecx    11f9:    83 ec 3c                sub    esp,0x3c    11fc:    e8 ef fe ff ff          call   10f0 <__x86.get_pc_thunk.bx>    1201:    81 c3 ff 2d 00 00       add    ebx,0x2dff    1207:    89 ce                   mov    esi,ecx    1209:    e8 42 fe ff ff          call   1050 <geteuid@plt>    120e:    89 45 e4                mov    DWORD PTR [ebp-0x1c],eax    1211:    83 ec 04                sub    esp,0x4    1214:    ff 75 e4                push   DWORD PTR [ebp-0x1c]    1217:    ff 75 e4                push   DWORD PTR [ebp-0x1c]    121a:    ff 75 e4                push   DWORD PTR [ebp-0x1c]    121d:    e8 0e fe ff ff          call   1030 <setresuid@plt>    1222:    83 c4 10                add    esp,0x10     //調整棧幀    1225:    c7 45 e0 78 56 34 12    mov    DWORD PTR [ebp-0x20],0x12345678  //聲明并初始化了一個變量,地址為ebp-0x20,數據為0x12345678    122c:    8b 46 04                mov    eax,DWORD PTR [esi+0x4]    122f:    83 c0 04                add    eax,0x4    1232:    8b 00                   mov    eax,DWORD PTR [eax]    1234:    83 ec 08                sub    esp,0x8    1237:    50                      push   eax    1238:    8d 45 c0                lea    eax,[ebp-0x40]    123b:    50                      push   eax    123c:    e8 1f fe ff ff          call   1060 <strcpy@plt>        //將輸入點數據拷貝到ebp-0x40    1241:    83 c4 10                add    esp,0x10             //調整棧幀    1244:    83 ec 08                sub    esp,0x8    1247:    8d 45 c0                lea    eax,[ebp-0x40]    124a:    50                      push   eax    124b:    8d 83 08 e0 ff ff       lea    eax,[ebx-0x1ff8]    1251:    50                      push   eax    1252:    e8 e9 fd ff ff          call   1040 <printf@plt>    1257:    83 c4 10                add    esp,0x10    125a:    83 ec 08                sub    esp,0x8    125d:    ff 75 e0                push   DWORD PTR [ebp-0x20]    1260:    8d 83 14 e0 ff ff       lea    eax,[ebx-0x1fec]    1266:    50                      push   eax    1267:    e8 d4 fd ff ff          call   1040 <printf@plt>    126c:    83 c4 10                add    esp,0x10    126f:    81 7d e0 42 42 42 42    cmp    DWORD PTR [ebp-0x20],0x42424242      //判斷ebp-0x20處的變量是否為0x42424242    1276:    75 18                   jne    1290 <main+0xa7>     //如果相同則跳轉到后門函數    1278:    83 ec 04                sub    esp,0x4    127b:    6a 00                   push   0x0    127d:    6a 00                   push   0x0    127f:    8d 83 24 e0 ff ff       lea    eax,[ebx-0x1fdc]         //將’/bin/sh’壓入棧中,作為函數參數    1285:    50                      push   eax              //將0壓入棧中作為函數參數    1286:    e8 05 fe ff ff          call   1090 <execve@plt>        //后門    128b:    83 c4 10                add    esp,0x10    128e:    eb 12                   jmp    12a2 <main+0xb9>    1290:    83 ec 0c                sub    esp,0xc    1293:    8d 83 2c e0 ff ff       lea    eax,[ebx-0x1fd4]    1299:    50                      push   eax    129a:    e8 d1 fd ff ff          call   1070 <puts@plt>    129f:    83 c4 10                add    esp,0x10    12a2:    b8 00 00 00 00          mov    eax,0x0    12a7:    8d 65 f4                lea    esp,[ebp-0xc]    12aa:    59                      pop    ecx    12ab:    5b                      pop    ebx    12ac:    5e                      pop    esi    12ad:    5d                      pop    ebp    12ae:    8d 61 fc                lea    esp,[ecx-0x4]    12b1:    c3                      ret    12b2:    66 90                   xchg   ax,ax    12b4:    66 90                   xchg   ax,ax    12b6:    66 90                   xchg   ax,ax    12b8:    66 90                   xchg   ax,ax    12ba:    66 90                   xchg   ax,ax    12bc:    66 90                   xchg   ax,ax    12be:    66 90                   xchg   ax,ax

          棧中的情況如下圖:

          pwn

          如此當填充滿32個字節的數據后,在填充4個B,即達成利用條件,進入后門函數。

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          USARMY是什么意思?美國軍隊不同于其他英語國家。通常,在英語中,陸軍指的是陸軍,如中國人民解放軍,但在美國,美國陸軍應該翻譯成美國軍隊或美國軍隊,陸軍是美國陸軍的一個專門術語,而美國空軍和海軍的英語則更為正常,即usaf-U.s.空軍和usn-U.s.navy某個軍隊沒有具體規定,不需要大寫,小寫的意思是一般意義上的軍隊。jointhearmy.這個詞組中army是否需要大寫?意思是美國軍隊。...

          IPHONE4S如何從電腦里下載軟件?下載并安裝itunes購買應用程序。打開itunes,點按左側的itunes store,選擇您喜愛的應用程序,然后下載它。將iphone連接到電腦,點擊左邊的設備3354應用或音樂3354,勾選下面的應用或音樂3354,點擊右下角的同步或應用。注意:可能會提示,(1)如果不想刪除iphone的原應用,請選擇轉移;否則,請選擇不傳輸。(2)還有一個提示可能出...

          移動4g套餐哪個最劃算?8元天悅卡套餐最最合算8元天悅卡,月租8元,乾坤二卦30分鐘通話費,1元500M流量,自動續費,不用什么不花錢多。但,這個套餐好像老用戶肯定不能申請辦理。在網上有各種攻略這個可以做個參考,很多網友申請辦理成功了。我感覺這個套餐最合算,而且更適合保號,等待“攜號轉網”的用戶三大運營商4g套餐對比,哪一個更劃算?以貴州聯通為例,我公司有所推出4G全國組合套餐,里面乾坤二卦有流量...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>