ipwn
[pwnable.kr] lotto 본문
이번 문제는 lotto 문제다.
한 번 무슨 오류가 있는지 찾아보자.
서버에 접속하고 바로 코드를 보겠다.
코드를 해석해보면 먼저 submit이라는 6칸 문자열 공간에 입력하고싶은 값을 입력해준다.
그리고 lotto 변수에는 6칸 각각 랜덤한 값이 들어간다. 1 ~ 45의 숫자가 대입된다. 랜덤값을 대입할 때는
이상한 점이 없어 보인다. 그리고 그 뒤에 랜덤값과 입력한 값을 비교해서 같을 경우 match값을 올려주고,
match값이 6이 될 경우에는 flag를 읽어와준다. 그런데 submit과 lotto를 비교하는 부분이 이상하다.
분명 같은 index에 있는 값들을 비교해야 하는데, lotto[i] 에 있는 값을 submit[j]와 비교한다.
만약 이런 식으로 비교를 하게 된다면, lotto[i]의 값과 sumbit 문자열 전체를 비교하게 된다.
즉 submit 문자열에 모두 같은 값을 대입해주고, lotto 배열 안에 한 개의 같은 값이 존재하게 된다면 flag를 읽어와줄 것이다.
분명 시간은 좀 걸릴 수 있겠지만 적어도 lotto와 submit의 같은 index에 모두 같은 값을 대입해주는 것 보다는 쉬울 것이다.
값을 대입할 때는 문자로 인식한다. 즉 아스키 코드표에 나와있는 값을 보게 되면 1 ~ 32의 값은
우리의 손으로 입력을 할 수 없다. 하지만 33 ~ 45의 값은 '!'와 같은 특수기호들을 의미하기 때문에, 아스키 코드표를 보고
특수 기호를 범위에 맞게 잘 넣어주게 된다면 성공적으로 flag를 읽어올 수 있을 것이다.
한 번 제대로 되는지 프로그램을 실행해보자.
!가 아스키 값으로 33을 의미하길래 !를 넣어서 풀어봤다.
한 4번 정도 넣었더니 플래그가 나왔다.
'Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] cmd2 (0) | 2018.01.04 |
---|---|
[pwnable.kr] cmd1 (0) | 2018.01.04 |
[pwnable.kr] blackjack (0) | 2018.01.03 |
[pwnable.kr] random (0) | 2018.01.01 |
[pwnable.kr] passcode (0) | 2018.01.01 |