Phantom

[FC3] Iron_golem – Dark_eyes 본문

Pwnable/[Wargame]FC3

[FC3] Iron_golem – Dark_eyes

Ph4nt0m_ 2016. 2. 19. 09:57
반응형

이번 문제는 RET Sleding 문제이다.

 

NOP Sleding 이랑 다를 것이 없다 단지 RET를 여러 번 넣어 RET명령으로 원하는 곳에서 할 뿐이다.

 

이번 문제에서는 Fake EBP 사용을 막았다

SFP를 저장하고 오버플로우 한 다음에 다시 복원한다 그러면 당연히..SFP는 안전해진다.

RET를 계속 실행 시킬 경우 ESP는 계속 높은 주소로 올라가게 된다. Ret는 jmp eip 이기 때문에..

 

우리는 그럼 우리에게 맞는 주소를 찾아야 한다.

 

우선 strcpy 바로 다음과 ret에 BP를 걸고 RET에 아무 값이나 넣고 실행해본다.

자… 0x41414141 다음에 여러 부분이 보이는데 이제…RET Sleding으로 필요한 곳을 찾아서 이 다음으로 필요한 함수를 쓸 것이다.

필요한 함수는 아마 exec 계열 함수이다. 쉘을 띄워야 하니까?

음… 적절한 함수.. 가장 적절한 것이 execve 인것 같다.

Execve를 제외한 위의 함수들은 모두 인자가 3개정도가 필요하다.

허나 지금 메모리에서 3개를 쓸 수 없다 마지막에는 argv[1]이 와야 하는데 0x0070eab6과 0x0083eff4를 제외하면 NULL이나 다른 주소로 가게 된다

Execve를 쓰자

Execve의 인자를 보면 다음과 같다.

이렇다 메모리에서 가장 적절한 0x0070eab6과 0x0083eff4중 어떤 것이 더 나을까?

0x0070eab6을 두 번째 인자로 쓰면 환경변수는 0x0083eff4가 된다 그렇다면 오류가 뜰 것이다. 이 안에 무엇이 있는데 작동을 안 하면 함수가 오류를 낼 테니 말이다.

그렇다면 0x0083eff4는?

이것을 두 번째 인자로 쓰면 다음 인자는 NULL이기 때문에 문제가 없을 것이다!

 

그렇다면 우리는 페이로드를 이렇게 짤 수 있다.

 

RET를 3번 Sleding하여 0xfeffffa0에서 execve를 실행, 0x0083eff4를 argv[1]로 가진다.

그렇다면 0x0083eff4에 무엇이 들어가 있는지 보자.

0x01이 들어가 있다. 그럼 우린 이전에 썼던 프로그램을 0x01로 이름을 바꾸면 된다.

그리고 execve의 주소를 구한다.

페이로드는 이렇다.

반응형

'Pwnable > [Wargame]FC3' 카테고리의 다른 글

[FC3] Gate – Iron_golem  (0) 2017.04.21
Hell_fire – evil_wizard  (0) 2016.02.25
Dark_eyes – Hell_fire  (2) 2016.02.23
Comments