ipwn

[pwnable.kr] lotto 본문

Write up/Pwnable.kr

[pwnable.kr] lotto

ipwn 2018. 1. 3. 09:33


이번 문제는 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
Comments