먼저 ssh를 이용하여 위와 같이 pwnable.kr에 접속한다.
ls를 해주면 세가지 파일을 볼 수 있고 하나씩 실행시켜보면 각각 위와 같은 결과들을 볼 수 있다.
각각의 파일의 속성들을 봤더니 flag 파일의 권한을 얻을 수 있도록 변경해주는건가?라고 생각했다.
프로그램을 분석해보기 위해 우선 col.c의 코드를 살펴보았다.
메인함수를 보면 argc와 argv를 매개변수로 입력받고 argc와 argv 문자열의 길이에 따라 각각의 결과를 출력한다.
또한 hashcode와 check_password를 비교하여 값이 같다면 flag 파일을 보여주는 것임을 알 수 있었다.
다음으로 check_password 함수를 보면 반복문을 통해 5번 반복하는동안 res라는 변수에 ip[i]값을 더해준다는 것을
알 수 있었고 hashcode에는 0x21DD09EC라는 값이 들어 있으니 이 두 값을 같게 만들어 주어야 플래그를 얻어낼 수 있다.
여기서 int형 포인터로 형변환을 해주었기 때문에 4byte씩 읽어들이는데 passcode 길이는 20byte이므로 총 5번 접근한다.
계산기를 이용해 21DD09EC를 5로 나눠주면 몫은 06C5CEC8, 나머지는 4이다.
이때 5번 접근하기 때문에 06C5CEC8를 4번 더하고 06C5CEC8+4=06C5CECC를 1번 더하면 hashcode 값과 같아진다.
여기서 주의할 점은 스크립트를 little-endian 방식을 사용하고 있기 때문에 이에 맞춰 작성해야 한다.
따라서 이와 같이 값을 넣어주면 플래그를 확인할 수 있다.
'2021-1 STUDY > Pwnable Study' 카테고리의 다른 글
Week05_BOF (0) | 2021.05.19 |
---|---|
Week04_GDB 분석 (0) | 2021.05.12 |
Week03_setuid (0) | 2021.05.05 |
Week02_Pwntools (0) | 2021.04.28 |
Week01_메모리구조 (0) | 2021.03.31 |