-
Pwnable.kr #2 collisionWargame Site/Pwnable.kr 2019. 2. 24. 22:19
분야는 다르지만, pawnable.kr 이 los 보다 어려운 것 같다.
이번에도 ssh 를 이용한 접근이다.
우선 현재 접속한 계정정보를 알아보도록하자.
'ls -l' 의 결과 다음과 같은 결과가 나왔고,
1 단계 문제와 마찬가지로 col 파일의 실행, 읽기 권한과 col.c 의 읽기 권한이 있는 것을 알 수 있다.
col.c 의 코드는 다음과 같았다.
우선 인자를 넘겨주어야 한다는 점, 그리고 인자의 길이가 20 이여야 한다는 점
그리고 check_password ( 인자 ) 의 결과가 hashcode 와 같아야 한다는 제약조건이 있었다.
hashcode 의 값은 0x21DD09EC 이고,
분석을 해보니 20 개의 char 를 int 를 가르치는 포인터로 변환했다.
그럼 기존의 char 들의 hex 값이 int 에 담기게 되는데,
이 때, 1 바이트인 char 4 개를 하나의 인자로 취급한다.
즉, input 값을 hex 로 변환했을 때, 4 바이트 씩 다섯개로 나눈 것을 모두 더해주는 함수가 되는 것이다.
하지만 다섯 덩이를 더해줬을 때, 0x21DD09EC 인 것을 찾는 것보다 효율적인 방법이 있다.
위의 예시와 같은 방식으로 출력값은 0x?21DD09EC 의 형태여도 상관없다.
? 가 2 였을 때를 가정하고 문제에 접근했다.
221DD09EC 를 5로 나눴더니 0x6D2C352F ( +1 ) 가 나왔다.
0x6D2C352F * 4 + 0x6D2C3530 = 0x221DD09EC
하지만, 여기서 중요한 개념이 Little Endian 의 개념이다.
Intel CPU에서는 리틀 엔디언 방식을 사용한다.
산술 연산과 데이터의 타입이 확장 / 축소될 때 더 효율적이라는 장점을 가지고 있다.
0x6D2C352F > 2F(/) 35(5) 2C(,) 6D(m) 로 넣어주어야한다.
0x6D2C3530 > 30(0) 35(5) 2C(,) 6D(m) 로 넣어주어야한다.
/5,m/5,m/5,m/5,m05,m 을 넣어주면 된다. ㅎㅎ
0x21DD09EC 자체에 접근한 답도있다.
-c 옵션은 파이썬 코드를 바로 실행해주는 옵션이다.
이를 통해 인자로 넘겨주면 문제에 훨씬더 수월하게 접근할 수 있다.
./col `python -c 'print "\xC8\xCE\xC5\x06" + "\xC9\xCE\xC5\x06" * 4'`
'Wargame Site > Pwnable.kr' 카테고리의 다른 글
Pwnable.kr #5 cmd2 (0) 2019.04.11 Pwnable.kr #4 cmd1 (0) 2019.04.09 Pwnable.kr #3 bof (0) 2019.03.08 Pwnable.kr #1 fd (0) 2019.02.24 댓글