본문 바로가기

Write Up/los

los gremlin[1번]

바로 시작하겠습니다.

문제입니다.

제가 php를 잘 몰라서 그냥 뇌피셜로 코드를 해석했습니다.

preg_match()를 구글링 해보니 문자열을 찾는 함수라고 합니다.

즉 preg_match()안에 있는 문자열을 사용하면 No Hack이라고 종료되는 것을 볼 수 있습니다.

 

그 다음 id와 pw를 입력받습니다.

문제를 어떻게 풀 수 있을지 생각해보니 if($result['id']) solve("gremlin"); 이 if문이 보이더군요.

id의 결과값이 참이면 된다는 것입니다.

 

id='{$_GET[id]}' and pw='{$_GET[pw]}'"; id의 값을 정해주는 줄을 보니

and 연산자 때문에 입력받는 id와 pw의 값이 모두 참이여야 됩니다.

 

?id=1&pw=1 일단 이렇게 id와 pw에 아무값이나 넣어줬습니다.

별일 없네요....ㅠㅜ

잠깐 php문법을 설명하자면

php에서 변수를 조정하고 싶으면 ?를 사용하고, 또 다른 변수를 조정하고 싶으면 &를 사용합니다.

 

왜 안풀리나 생각을 해보면 pw값이 틀렸음을 생각할 수 있습니다.

pw와 id 모두 참이여야 하는데

pw가 참이 아니라 if($result['id']) solve("gremlin"); 이 구문에 걸리지 않습니다.

 

그럼 pw를 어떻게 참으로 만들 수 있을까요???

 

우리는 여기서 or연산을 이용할 것입니다. 

 

거짓 or 참은 참이니까요.

 

다시 쿼리를 짜보면

 

?id=1&pw=1' or 1=1%23 

 

pw는 1이 아니니 pw=1'은 거짓임을 위에서 확인했습니다.

('가 한쪽에만 붙은 이유는 이미 문제에서 pw에 '를 붙여주기 때문에 '의 짝을 맞춰준 것이다.)

그리고 1=1은 참입니다.

 

즉 pw=1' or 1=1을 하면 참이 반환된다는 것이다.

 

뒤에 %23은 #인데 이는 한줄주석입니다.

같은 줄에 있는 #이후의 구문을 모두 무시합니다.

그렇게 짠 쿼리를 보내주면 '의 짝도 다 맞춰주고 pw가 참이되어서 문제가 풀리게 됩니다.

 

 

 

 

 

 

======================================================================

 

첫 라업입니다.

다음 los라업부터는 문제풀이만 간단하게 할 것 같습니다.

오류나 빠진부분 있으면 알려주세요. 수정하겠습니다.

'Write Up > los' 카테고리의 다른 글

los darkelf[6번]  (0) 2020.01.04
los wolfman[5번]  (0) 2020.01.04
los orc[4번]  (0) 2020.01.01
los goblin[3번]  (0) 2019.12.27
los cobolt[2번]  (0) 2019.12.27