2019. 4. 20. 13:51ㆍSystem 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가 뜨는 것을
볼 수 있습니다!
고생하셨습니다!