메인화면입니다.

그럼 auth 버튼을 클릭해보겠습니다.

auth클릭시 "Access_Denied!"메시지가 뜨네요 ~

그럼 viewsource 를 클릭하여 소스를 한번 살펴 보겠습니다.

하.. 많네요 ㅋㅋㅋ

먼저 go 라는 변수에 파라미터 값이 들어가네요 ~

파라미터가 없을 경우 메인페이지로 이동하고 파라미터에 정규식에 해당하는 값이 있으면 "Access Denied!" 페이지를 보여줍니다.

정규식 의미? 단서?

1. '2'

2. '_'

3. '\'

4. 'from'

5. '_'

6. '='

7. '공백'

8. '단순문자'

9. '대소문자 구분없음'

위와 같은 상황을 우회하여 파라미터를 대입하여 결과를 뽑아내야합니다.

위의 두가지 if에 걸리지 않았다면 !

DB를 연결하고 rand() 함수를 통해 1~5까지의 번호를 무작위로 뽑아서 번호에 해당하는 if문으로 이동하여 쿼리가 실행됩니다.

rand==1 일때의 쿼리가 가장 쉬워 보이네요 ~

25%의 확률이니까 새로고침 여러번 하면 걸릴 것 입니다.

우리가 입력한 파라미터를 토대로 DB에 위와 같이 질의를 하고 그 결과를 mysql_fetch_array()함수를 통해 배열로 저장합니다.

그리고 그 배열의 첫번째 요소가 2일 경때 auth버튼을 클릭하면 "Hello admin"가 뜨도록 설계되어 있습니다.

먼저 파라미터에 2라는 값이 들어가면 정말 차단되는지 확인해보았습니다.

허허...

차단되네요 ~

그럼 파라미터를 조작해서 우회 접속하도록 하겠습니다.

저는 위와 비슷한 상황을 mysql을 이용하여 구축하였습니다.

php에서 본 쿼리문과 비슷하게 작성해보면 아래와 같습니다.

"select lv from test where lv = ($go)

이제 '$go' 부분을 union select를 통해 lv값을 만들어 보겠습니다.

저는 "union select 1<<1"로 만들었습니다. 1을 왼쪽 쉬프트 연산하면 2가 되는 원리를 이용했습니다.

ceil()을 이용하는 방법도 있더라구요 ~

암튼 '2'값을 만들어 주면 됩니다.

하지만 저 상태로 파라미터 값을 준다면 공백 때문에 차단될 것입니다.

이를 우회하기 위해 '(', ')' 괄호를 사용하여 작성합니다.

자 이제 파라미터에 값을 주고 새로고침을 해보겠습니다.

성공했습니다.

뒤에 '%23'을 준 이유는 주석처리('#')를 하기 위함입니다. 주석처리를 하지 않는다면 die('nice try!')가 먼저 실행되기 때문입니다.

그럼 auth 버튼을 클릭해보겠습니다.

Hello admin 창이 떳네요 ~~

클리어 !

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level9 (old)  (752) 2020.04.27
[webhacking.kr] Level8 (old)  (0) 2020.04.27
[webhacking.kr] Level6 (old)  (2) 2020.04.27
[webhacking.kr] Level5 (old)  (2) 2020.04.27
[webhacking.kr] Level4 (old)  (312) 2020.04.27

+ Recent posts