ipwn
[pwnable.kr] collision 본문
ssh서버에 접속해보자.
이제 서두 없이 바로바로 코드를 읽어보자.
코드의 flag를 읽는 부분을 보아하니 argv[1]의 값을 check_password함수에 집어넣어 나온
return값과 hashcode를 비교해 같은 값이면 flag를 읽어와 출력해준다.
그리고 값이 같지 않거나, argv[1]에 20byte크기가 아닌 값을 입력할 경우에는 종료시킨다.
이제 check_password가 무슨 함수인지만 확인해보면 확실히 flag를 읽어올 수 있을 것 같다.
check_password함수를 보니 argv[1]의 값을 형변환을 해 4byte씩 5개
즉 20byte 크기의 int형의 배열로 만들었다고 볼 수 있다.
그 배열의 값들을 res에 순서대로 오차없이 한 개씩 더해주는 걸 확인할 수 있고 다 더한 뒤에는 그 값을 return해준다.
이제 확실히 flag를 읽어올 수 있다.
hashcode의 값은 0x21DD09EC의 값을 갖고 있다.
5번 나눠주어 더하는 코드이니 hashcode의 값을 5로 나눈 몫, 그리고 나눈 나머지 값을 구하자.
그 뒤에 payload에는 나온 몫인 0x6c5cec8을 4번 반복해 16byte를 넣어주고
마지막 4byte를 채워줘야할 값은 몫 + 나머지의 값이 될 것이다.
정말 flag가 읽어와지는지 실행해보자.
성공적으로 flag가 읽어와졌다.
'Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] random (0) | 2018.01.01 |
---|---|
[pwnable.kr] passcode (0) | 2018.01.01 |
[pwnable.kr] flag (0) | 2017.12.31 |
[pwnable.kr] bof (0) | 2017.12.31 |
[pwnable.kr] fd (0) | 2017.12.28 |
Comments