먼저 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

+ Recent posts