[어설픈] 공주대학교 wargame pwnable 1 문제풀이

2019. 4. 20. 13:51System Hacking/Wargame

안녕하세요!

오늘은 http://wargame_sec.kongju.ac.kr에 있는

pwnable1 100점짜리 문제를

풀어보도록 하겠습니다!


문제에 접속하면 아래와 같이 뜹니다!

그래서 download를 하여서 

바이너리를 다운로드 받을 수 있습니다!



그래서 바이너리를 다운로드 한 후에!

IDA를 통해서 아래와 같이 열어주면!


변수가 상당히 많이 있네요!

char 형 변수가 

s1 부터 v5, v6 ,v7 ....(이후 생략)


그리고 각각의 변수에

숫자가 입력이 알아서 되네요!


v16까지 숫자가 잘 들어간 다음에!


Input password: 라는 문장을 printf 함수를 통해서 출력하네요!

그리고 scanf로 s2 변수에 값을 입력합니다!


그리고 strcmp을 통해서 s1과 s2의 값이 같지 않으면!

wrong이라고 출력하고 프로그램을 exit(0)을 통해서

종료하고!


만약 strcmp을 통해서  두 값이 같으면!

correct!이라고 출력을 하네요!

(strcmp는 두 문자가 같으면 0을 반환함)


저희의 목표는 correct이라고 출력되면 끝나는 거겠죠?




근데 맨 위에 있는 변수들을 자세히 보면

char s1 옆에 주석들이 있는데요! 


// rsp +10h


근데 그 밑에 변수들을 보니 변수의 시작 주소가

다 1밖에 차이가 나질 않아요!

rsp+11h, rsp+12h ...(이후 생략)


그래서 제가 한 생각은

아 이거 배열이겠구나!


그리고 저 숫자들은 뭔가 

익숙한 숫자들 아닌가요?

ascii 코드에서 자주 보던 숫자들 같아서요!


실제로 저희가 배열에 문자열을 입력하면

배열에는 숫자가 기록이 되는데!

그게 다 ascii 값으로 바뀌어서 기록되는 걸로 알고 있어요!


그래서 저기 있는 문자들을 싹다 

하나로 합쳐서 입력을 하게되면


my!naefake!!


그리고 아래와 같이 correct가 뜨는 것을 

볼 수 있습니다!


고생하셨습니다!