이번 코드는 복잡해 보이지만 뜯어보면 간단하다.

argv를 입력받고, argv길이가 20이어야 하며, hashcode = 0x21DD09EC 와 check_password(argv[1]) 이 같으면 플래그를 볼 수 있다.


check_password를 보자


입력받은 const char* p 를 int*로 캐스트한다.

int는 4byte이기 떄문에 4바이트씩 받는것으로 보인다.


그 후 for문을 이용해 res 에 ip[i] 를 더 해준 후, res를 return한다.


즉 20개의 글자를 4개씩 잘라 5번 더해서 hashcode를 만들어 주면 된다.

hashcode를 5로 나눠보자.


0x6C5CEC8이므로 \xc8\xce\xc5\x06을 5번 넣으면 될줄 알았다.


하지만 플래그가 안 출력되길래 5를 다시 곱해보았다.


보다시피 원래 hashcode보다4 줄었다. 그래서 \xc8\xce\xc5\x06  를 4번 넣고 마지막에는 \xcc\xce\xc5\x06  를 넣어보았다.


보다시피 flag가 출력되었다.

'pwnable > Toddler's Bottle' 카테고리의 다른 글

[Toddler's Bottle] random  (0) 2018.05.21
[Toddler's Bottle] passcode  (0) 2018.05.21
[Toddler's Bottle] flag  (0) 2018.05.21
[Toddler's Bottle] bof  (0) 2018.05.19
[Toddler's Bottle] fd  (0) 2018.05.18
블로그 이미지

천재보다는 범재

,