본문으로 바로가기

baby-bof 문제풀이

category 모의해킹/Dreamhack Wargame 2025. 6. 19. 17:55
728x90

문제 설명

 

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바이트씩 읽는다.

그리고 그 주소와 해당 값을 출력해준다.

 

설명만으로는 잘 모르겠으니, 직접해보자.

name: aaaaaaaabbbb

 

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