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 |