728x90

Daddy told me about cool MD5 hash collision today.

I wanna do something like that too!


ssh col@pwnable.kr -p2222 (pw:guest)


--------------------------------------------------------------------------------------------------

접속



20바이트의 프로그램 파라미터를


check_password() 함수의 파라미터로 넘기고


check_password() 함수의 리턴값이 hashcode값과 같을 때 풀리는 문제이다.



check_password() 함수 내용을 보면


20바이트 문자열을 int형 포인터로 캐스팅하여 정수값으로 res에 더한다.


res값이 0x21DD09EC 값과 같게 해야 한다.


4바이트씩 총 20바이트 즉 5번을 더하므로 5로 나눈다.



0x21DD09EC - 0x6C5CEC8 * 5 = 4이므로


마지막 4바이트는 0x6C5CEC8 보다 4가 큰 0x6C5CECC를 입력한다.



 

python을 이용해서 값을 주었다.


리틀엔디안( Little Endian ) 이기 때문에 각 4바이트를 뒤집어서 입력해주어야 한다.

728x90

'ctf + wargame > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] - fd  (0) 2015.07.12
728x90

Mommy! what is a file descriptor in Linux?


ssh fd@pwnable.kr -p2222 (pw:guest)


--------------------------------------------------------------------------------------------------

접속 해 보자.



소스 파일을 열어보자



위 소스를 보면


메인함수의 매개변수를 정수로 변환하여 { atoi() - 아스키값을 정수로 }


0x1234를 뺀값을 파일디스크립터로 취하여 buf에 값을 읽어드린다.


그리고 "LETMEWIN\n"와 문자열을 비교하여 flag파일 내용을 출력한다.



- 파일 디스크립터(File Descriptor) : 시스템이 할당하여 준 파일이나 소켓을 대표하는 정수

   이 정수를 이용하여 파일에 접근하거나 제어할 수 있다. (윈도우에서의 HANDLE과 같다.)


항상 미리 예약되어 있는 값이 있는데

      ㄴ  표준 입력 : 0

          표준 출력 : 1

          표준 에러 출력 : 2

이다. 



해서 위 fd값을 표준 입력의 fd인 0으로 값을 주면 buf에 원하는 값을 넣을 수 있다.


0x1234는 십진수로 4660이므로




성공.

728x90

'ctf + wargame > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] - collision  (0) 2015.07.12

+ Recent posts