달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2017. 7. 9. 15:14

[문제풀이] pwnable.kr - unlink Wargames/pwnable.kr2017. 7. 9. 15:14



※ 문제풀이 


해당 문제는 unlink 과정을 시뮬레이션하여 메모리를 덮어쓰는 것으로 덮어쓰는 위치를 잘 조정하면 프로그램의 EIP를 변경할 수 있다. 


핵심적으로 이해해야 할 코드 부분은 아래와 같다. 


typedef struct tagOBJ{

  struct tagOBJ* fd;

  struct tagOBJ* bk;

  char buf[8];

}OBJ;


void unlink(OBJ* P) {

  OBJ* BK;

  OBJ* FD;

  BK=P->bk;

  FD=P->fd;

  FD->bk=BK;

  BK->fd=FD;

..... 

int main(int argc, char*argv[]) {


OBJ* A = (OBJ*)malloc(sizeof(OBJ));

OBJ* B = (OBJ*)malloc(sizeof(OBJ));

OBJ* C = (OBJ*)malloc(sizeof(OBJ));

....

gets(A->buf);

....

unlink(B);

return 0;


}


unlink 함수에 전달되는 OBJ 인스턴스를 변조하여 내가 쓰고 싶은 부분에 값을 쓸 수 있다. 

이는 내가 입력한 값에 대한 입력 값 검증이 존재하지 않아 가능하게 된다. 


즉, 내가 A->buf에 입력한 값이 B에 영향을 끼친다. 


이로써 실행 흐름을 변경할 수 있고 결국 플래그를 획득할 수 있게 된다. 



문제풀이 끝!





블로그를 쓰면 쓸수록 성의가 없어지는 것 같네 ㅠㅠ 시간있을 때 조금 더 보충하도록 하겠음!!



'Wargames > pwnable.kr' 카테고리의 다른 글

[문제풀이] pwnable.kr - cmd2  (0) 2017.07.09
[문제풀이] pwnable.kr - asm  (0) 2017.07.09
[문제풀이] pwnable.kr - uaf  (0) 2017.07.09
[문제풀이] pwnable.kr - mistake  (0) 2017.07.09
[문제풀이] pwnable.kr - leg  (0) 2017.07.09
:
Posted by einai