문제 설명
Simple pwnable 101 challenge
Q. What is Return Address?
Q. Explain that why BOF is dangerous.
버퍼오버플로우 발생시켜서 플래그 받아오는 문제랍니다 ^*^
문제 풀이
코드를 뜯어보자.

win 함수에서 flag를 불러오는 것이 보인다.
그러면 win 함수를 호출하면 끝나는 것이겠지?

근데 냅다 main 함수는 win 함수를 호출하지 않는다고 한다.

name을 입력받고.. 뭔갈 총 16번(0x10) 반복하는데....
(name + idx *8) name의 시작 주소에서 8바이트씩 떨어진 위치를 계산한 후에,
*(long*)(name + idx *8) 그 주소를 long*으로 간주하고, 8바이트씩 읽는다.
그리고 그 주소와 해당 값을 출력해준다.
설명만으로는 잘 모르겠으니, 직접해보자.

a 8개와 b 4개를 입력해봤다.
8바이트씩 읽는다고 했으니, 맨 위에 주소와 value에 61이 총 8번 찍힌 걸 볼 수 있다.
참고로 61은 a의 아스키코드 값이다.
그 밑에 바로 62(b)가 총 4번찍힌 것을 볼 수 있다.

코드를 더 살펴보자.
hex value 값을 받고, integer count 값도 받는다.
그리고 value값을 count번 동안 8바이트씩 읽는다.
그 뒤에 코드는 주소와 그 주소에 저장되어있는 값을 테이블로 보여주는 코드다.
우리는 win함수의 호출 주소를 알고 있다.

그리고 위에서 4번째 스택에서 저장해놓은 주소값으로 돌아가는 것을 확인할 수 있다.
저 돌아가는 주소값에 win함수의 주소값을 넣어버린다면? 우리는 flag를 출력할 수 있게 된다.
vlaue에는 win 주소값을 입력해주고, count에는 4이상을 넣어준다면..

win 함수가 호출되어버리면서 flag가 출력된다.
'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글
| session-basic 문제풀이 (0) | 2025.10.24 |
|---|---|
| ROT128 문제풀이 (0) | 2025.10.22 |
| php7cmp4re 문제 풀이 (1) | 2025.06.17 |
| session 문제풀이 (2) | 2025.06.04 |
| exersice: SSH 문제풀이 (0) | 2025.05.22 |