개인공부/pwnable

[pwnable]pwnable.kr 2번

5ddish 2018. 9. 9. 11:57

2번 문제임당 MD5 해쉬 충돌에 관한 내용을 아빠가 말해주었나바염 


모르겠고 ssh접속합니당





접속해서 보면 col , col.c flag 파일이 있고 col 에 setuid 가 걸려있슴당 



일단 그냥 col을 한번 실행 시켜 봤씀당 


./col 했을경우 passcode 를 입력하라구 하고 ./col 11 하니까 20바이트여야 댄다고 하네염 


그래서 ./col a 20개 를 넣어주니 틀렸답니당 히히히히




풀기 위해서 소스코드를 보았어요 



가장 주의를 기울여서 봐야 할 부분은 check passcode 함수 부분이에염


저기서 char 형 포인터가 int 형 포인터로 형변환이 일어나고 이써염 이말이 뭐냐면 


AAAABBBBCCCCDDDDEEEE가 만약 입력값(argv[1]) 로 들어 왔다면 


0x41414141 0x42424242 0x43434343 0x44444444 0x45454545 로 변환이 된다는 거에요


그러면


ip[0] = 0x41414141

ip[1] = 0x42424242

ip[2] = 0x43434343

ip[3] = 0x444144444

ip[4] = 0x45454545


넹 ㅇㅇ


이렇게변환해서 포문 돌려서 다 더한값이 hashcode 랑 같아야 해여 


포문 보면 간단하게 5번 더해주고 있자나염 


그래서 여기서 고민을 했어염 어케 해야하나 ...... 그러다가 못풀겠어서 ..ㅠㅠ 인터넷 찾아봤는데 5번 더했으니까 5번 나누면 된다고 했어요


암튼 나눠보니까 0x6C5CEC8 값이 나오네염 


그럼 0x6C5CEC8 이 값을 넣어주면 될꺼라고 생각해써염 


넣어 줬는데 안대여 .. 그래서 또 인터넷 찾아보니까 0x6C5CEC8 이 값에 다시 5를 곱해보면 원래 해쉬코드 보다 4바이트 적게.. 나온다고 하네요 ㄷ ㄷ ㄷ ㄷ ㄷ 


이런거 어케 생각하고 하는거지 


암튼 그래서 0x6C5CEC8 값 *4 랑 0x6C5CECC 한개를 넘겨주면 대여 ! 



그래서 최종 스크립트는 !!!!!!!!!!!!!!!


./col `python -c 'print "\xC8\xCE\xC5\x06"*4 + "\xCC\xCE\xC5\x06"'`


뭐지 터미널에서 긁어오니까 일케대넹 ... 암튼 저거 입니다 !!!!!!!!!