4주차_Webhacking 과제4 : los(goblin)

2023. 10. 5. 19:05SWLUG/web hacking

네번째 문제

 

 

https://los.rubiya.kr/gate.php

 

los.rubiya.kr

 

다음 문제를 풀어보겠다.

 

해당 내용을 확인했을때 , 아이디가 admin이라고 되어있는데 위처럼 guest라고 이미 설정이 되어있다.

 

 

그래서 ?id=admin 이라고 해봤는데 바뀌지 않는다.

그러면 이미 있는 guest를 무시하고 새롭게 작성할 방법이 있어야할 것 같다.

 

 

일단은 no에다가 1을 입력했더니 hello guest라고 뜬다.

admin으로 들어와야하는데 흠

 

 

 

admin으로 변경시도.

 

 

이렇게 바꿀 수도 있는 것 같다.

그렇게 기대하고 enter를 누르니까 다시 guest로 바뀌어버린다.

 

id에는 아무리 다른걸 입력해도 꿋꿋하게 guest만 있고, no에도 1만 들어갔을때 hello guest가 들어간다.

 

 

재도전 역시 실패 

 

도저히 admin을 무력화시킬 방법을 모르겠어서, 찾아보았다.

 

나는 잘 몰랐지만, 위 코드에서 따옴표에 필터링이 걸려있다고 한다. 난 그러한 이유로 %27을 쓴 것은 아니었다.

그냥 쓴거였는데, 무튼 %27을 사용해도 딱히 문제가 풀리지는 않았었다.

 

그래서 풀이를 보니, admin이라는 문자를 hex(16진수) 값으로 입력하는 방법도 있다고한다.

 

이 방법은 string 우회방법인데 내가 원하는 문자열이 필터링되었을 경우 사용하는 방법이라고 한다.

데이터베이스마다 다를 수 있지만, 0xXXXXXX 라는 값(헥사값)이 입력이 되면 '스트링'으로 인식을 하게 된다고 한다.

그래서 admin을 16진수 값으로 바꾸고자 하였다.

 

 

admin을 16진수 값으로 바꾸게되면 "0x61646d696e"이다. 

 

 

위와 같이 php?no=1234 or id= 0x61646d696e 를 넣어 무력화시켰다. 

 

guest를 삭제할생각만 했지 뒤에 값을 추가로 넣을 생각을 못했다.

( or을 사용해서 뒤에 id를 추가하는 것과 필터링을 우회해 admin을 16진수로 표현하는 방법이 굉장히 신선하게 느껴졌다. 이러한 방법도 있구나 배워갈 수 있었다. )

 

0x61646d696e에 따옴표를 붙이지 않았지만, 이 헥사값 자체를 변수로 인정하지 않고 문자열로 받아들이기 때문에 답이 맞는 것이라고 한다.

(기억해두자)

 

 

 

참고 학습 자료

 

[LOS] 3. Goblin 문제 풀이 (tistory.com)

 

[LOS] 3. Goblin 문제 풀이

1. 고블린 문제 풀이 자, 이제 3번째 고블린이다. 고블린의 문제는 위와 같다. if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 이전문제들와 같

hackforus.tistory.com

 

 

다른 방식으로 푼 자료

( 근데 아래와 같이도 풀어봤는데 나는 안됐다... )

[LOS] 3. goblin 문제 풀이 :: 끄적끄적 (tistory.com)

 

[LOS] 3. goblin 문제 풀이

쿼리문을 보니 id는 guest로 이미 고정되어 있고, no를 get 방식으로 입력받는다. guest로 고정된 id를 admin으로 바꾸면 문제가 해결될 것이다. 일단 인자로 no를 1부터 넣어보았는데, no = 1일 때만 Hello g

g-idler.tistory.com

 

[ 중간 풀이 과정에서 겪었던 일]

 

 하하