Welcome

buaii·2023년 9월 29일
0

System Hacking

목록 보기
6/11

malloc

pwnable.xyz의 첫번째 문제이다


문제를 다운받으면 .gz파일로 되어있어서 압축을 풀어주어야 한다

gzip -d filename
tar -xvf filename

해당 코드로 두번 풀어주면 된다
압출을 풀면 image폴더에 문제가 생성된다


ida

따로 제공된 c파일이 없어서 코드를 ida에 넣어서 확인했다

이 문제의 핵심 v3를 0으로 만들어주면 flag를 얻을 수 있다


위 사진을 보면 [rsp+28h+size]가 length of your message를 통해 입력받은 값이라는 걸 알 수 있다

여기서 mov byte ptr [rbp+rdx-1], 0를 해주기 때문에 해당 주소를 v3의 주소로 바꾼다면 v3값을 0으로 만들어 줄 수 있다

  • rbp = *v4 = malloc(size)
  • rdx = [rsp+28h+size] = size = Length of your message로 입력한 값
  • -1

이 세개를 모두 합친값이 v3의 주소가 된다면 조건문을 만족하게 되고 cat flag를 실행할 수 있게된다


exploit

malloc은 할당에 실패하게 되면 null을 반환하게 된다

  1. 이 부분을 이용하여 rbp를 0으로 만들어준다.
  2. size를 v3 leak주소에 1을 더한 값을 넣어준다
  3. -1을 더한다

이 과정을 거치게 되면
byte ptr[rbp+rdx-1] = byte ptr[0 + (v3 + 1) - 1] = byte ptr[v3] = 0
즉, v3는 0이 되어 조건을 만족하게 된다

leak보다 1 큰 값을 넣어주면, cat /flag가 실행되어 플래그를 얻었다

profile
buaii

0개의 댓글

관련 채용 정보